home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / MATH / MATLAB.ZIP / MATLAB.DOC < prev    next >
Text File  |  1985-11-07  |  120KB  |  4,027 lines

  1.  
  2.  
  3. 6/24/81
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.                        MATLAB Users' Guide
  16.                             May, 1981
  17.  
  18.  
  19.                            Cleve Moler
  20.                  Department of Computer Science
  21.                     University of New Mexico
  22.  
  23.  
  24.      ABSTRACT.  MATLAB is an  interactive  computer  program
  25.      that   serves   as   a   convenient   "laboratory"  for
  26.      computations  involving  matrices.   It  provides  easy
  27.      access  to matrix software developed by the LINPACK and
  28.      EISPACK projects.  The program is  written  in  Fortran
  29.      and  is  designed  to  be  readily  installed under any
  30.      operating system which permits interactive execution of
  31.      Fortran programs.
  32.  
  33.  
  34.  
  35.                             CONTENTS
  36.  
  37.           1.  Elementary operations              page  2
  38.           2.  MATLAB functions                         8
  39.           3.  Rows, columns and submatrices            9
  40.           4.  FOR, WHILE and IF                       10
  41.           5.  Commands, text, files and macros        12
  42.           6.  Census example                          13
  43.           7.  Partial differential equation           19
  44.           8.  Eigenvalue sensitivity example          23
  45.           9.  Syntax diagrams                         27
  46.          10.  The parser-interpreter                  31
  47.          11.  The numerical algorithms                34
  48.          12.  FLOP and CHOP                           37
  49.          13.  Communicating with other programs       41
  50.          Appendix.  The HELP file                     46
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69. 6/24/81
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.                        MATLAB Users' Guide
  82.                          November, 1980
  83.  
  84.  
  85.                            Cleve Moler
  86.                  Department of Computer Science
  87.                     University of New Mexico
  88.  
  89.  
  90.  
  91.      MATLAB is an interactive computer program that serves  as  a
  92. convenient  "laboratory" for computations involving matrices.  It
  93. provides easy access to matrix software developed by the  LINPACK
  94. and EISPACK projects \1-3!.  The capabilities range from standard
  95. tasks such as solving simultaneous linear equations and inverting
  96. matrices, through symmetric and nonsymmetric eigenvalue problems,
  97. to fairly sophisticated matrix tools such as the  singular  value
  98. decomposition.
  99.  
  100.      It is expected that one of MATLAB's primary uses will be  in
  101. the  classroom.   It  should be useful in introductory courses in
  102. applied linear algebra, as  well  as  more  advanced  courses  in
  103. numerical analysis, matrix theory, statistics and applications of
  104. matrices to other disciplines.  In nonacademic  settings,  MATLAB
  105. can  serve as a "desk calculator" for the quick solution of small
  106. problems involving matrices.
  107.  
  108.      The program is written in Fortran  and  is  designed  to  be
  109. readily  installed  under  any  operating  system  which  permits
  110. interactive  execution  of  Fortran  programs.    The   resources
  111. required  are  fairly  modest.  There are less than 7000 lines of
  112. Fortran  source  code,  including   the   LINPACK   and   EISPACK
  113. subroutines  used.   With  proper use of overlays, it is possible
  114. run the system on a minicomputer with only 32K bytes of memory.
  115.  
  116.      The size of the matrices  that  can  be  handled  in  MATLAB
  117. depends  upon  the  amount  of storage that is set aside when the
  118. system is compiled on a particular machine.  We have  found  that
  119. an  allocation of 5000 words for matrix elements is usually quite
  120. satisfactory.  This provides room for several 20 by 20  matrices,
  121. for  example.   One  implementation  on  a  virtual memory system
  122. provides 100,000 elements.  Since most  of  the  algorithms  used
  123. access  memory  in  a  sequential  fashion,  the  large amount of
  124. allocated storage causes no difficulties.
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135. MATLAB, page 2
  136.  
  137.  
  138.  
  139.      In some ways, MATLAB  resembles  SPEAKEASY  \4!  and,  to  a
  140. lesser  extent, APL.  All are interactive terminal languages that
  141. ordinarily accept single-line  commands  or  statements,  process
  142. them  immediately,  and  print  the  results.  All have arrays or
  143. matrices as principal data types.  But for MATLAB, the matrix  is
  144. the  only  data  type  (although  scalars,  vectors  and text are
  145. special cases), the underlying system is  portable  and  requires
  146. fewer resources, and the supporting subroutines are more powerful
  147. and, in some cases, have better numerical properties.
  148.  
  149.      Together, LINPACK and EISPACK represent the state of the art
  150. in software for matrix computation.  EISPACK is a package of over
  151. 70 Fortran subroutines for various matrix eigenvalue computations
  152. that are based for the most part on Algol procedures published by
  153. Wilkinson, Reinsch  and  their  colleagues  \5!.   LINPACK  is  a
  154. package  of  40  Fortran subroutines (in each of four data types)
  155. for solving  and  analyzing  simultaneous  linear  equations  and
  156. related matrix problems.  Since MATLAB is not primarily concerned
  157. with either execution time  efficiency  or  storage  savings,  it
  158. ignores  most  of  the special matrix properties that LINPACK and
  159. EISPACK subroutines  use  to  advantage.   Consequently,  only  8
  160. subroutines   from  LINPACK  and  5  from  EISPACK  are  actually
  161. involved.
  162.  
  163.      In  more  advanced  applications,  MATLAB  can  be  used  in
  164. conjunction  with other programs in several ways.  It is possible
  165. to define new MATLAB functions and add them to the system.   With
  166. most  operating  systems,  it  is  possible to use the local file
  167. system to  pass  matrices  between  MATLAB  and  other  programs.
  168. MATLAB  command  and statement input can be obtained from a local
  169. file  instead  of  from  the  terminal.   The  most   power   and
  170. flexibility  is obtained by using MATLAB as a subroutine which is
  171. called by other programs.
  172.  
  173.      This document first gives an overview  of  MATLAB  from  the
  174. user's  point  of  view. Several extended examples involving data
  175. fitting, partial differential equations,  eigenvalue  sensitivity
  176. and other topics are included.  A formal definition of the MATLAB
  177. language and an brief description of the parser  and  interpreter
  178. are   given.   The  system  was  designed  and  programmed  using
  179. techniques described by Wirth \6!, implemented  in  nonrecursive,
  180. portable  Fortran.   There  is  a brief discussion of some of the
  181. matrix algorithms and of their numerical properties.   The  final
  182. section  describes  how  MATLAB  can be used with other programs.
  183. The appendix includes the HELP documentation available on-line.
  184.  
  185.  
  186. 1.  Elementary operations
  187.  
  188.  
  189.      MATLAB works with essentially only one  kind  of  object,  a
  190. rectangular matrix with complex elements.  If the imaginary parts
  191. of the elements are all zero, they  are  not  printed,  but  they
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201. MATLAB, page 3
  202.  
  203.  
  204.  
  205. still  occupy  storage.   In  some situations, special meaning is
  206. attached to 1 by 1 matrices, that is scalars, and to 1 by n and m
  207. by 1 matrices, that is row and column vectors.
  208.  
  209.      Matrices can be introduced into  MATLAB  in  four  different
  210. ways:
  211.         --  Explicit list of elements,
  212.         --  Use of FOR and WHILE statements,
  213.         --  Read from an external file,
  214.         --  Execute an external Fortran program.
  215.  
  216.      The explicit list is surrounded by angle brackets,  '<'  and
  217. '>', and uses the semicolon ';' to indicate the ends of the rows.
  218. For example, the input line
  219.  
  220.    A = <1 2 3; 4 5 6; 7 8 9>
  221.  
  222. will result in the output
  223.  
  224.    A     =
  225.  
  226.        1.    2.   3.
  227.        4.    5.   6.
  228.        7.    8.   9.
  229.  
  230. The matrix A  will  be  saved  for  later  use.   The  individual
  231. elements  are separated by commas or blanks and can be any MATLAB
  232. expressions, for example
  233.  
  234.    x = < -1.3, 4/5, 4*atan(1) >
  235.  
  236. results in
  237.  
  238.    X     =
  239.  
  240.      -1.3000   0.8000   3.1416
  241.  
  242. The elementary functions available include sqrt, log,  exp,  sin,
  243. cos, atan, abs, round, real, imag, and conjg.
  244.  
  245.      Large matrices can be spread  across  several  input  lines,
  246. with  the  carriage  returns replacing the semicolons.  The above
  247. matrix could also have been produced by
  248.  
  249.    A = < 1 2 3
  250.          4 5 6
  251.          7 8 9 >
  252.  
  253.  
  254.      Matrices can be input from the local  file  system.   Say  a
  255. file named 'xyz' contains five lines of text,
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267. MATLAB, page 4
  268.  
  269.  
  270.  
  271.    A = <
  272.    1 2 3
  273.    4 5 6
  274.    7 8 9
  275.    >;
  276.  
  277. then the  MATLAB  statement  EXEC('xyz')  reads  the  matrix  and
  278. assigns it to A .
  279.  
  280.      The FOR statement allows the generation  of  matrices  whose
  281. elements  are  given  by  simple formulas.  Our example matrix  A
  282. could also have been produced by
  283.  
  284.    for i = 1:3, for j = 1:3, a(i,j) = 3*(i-1)+j;
  285.  
  286. The semicolon at the end of the  line  suppresses  the  printing,
  287. which  in  this  case  would  have  been  nine versions of A with
  288. changing elements.
  289.  
  290.      Several statements may be given  on  a  line,  separated  by
  291. semicolons or commas.
  292.  
  293.      Two  consecutive  periods  anywhere  on  a   line   indicate
  294. continuation.   The  periods  and  any  following  characters are
  295. deleted, then another line is input  and  concatenated  onto  the
  296. previous line.
  297.  
  298.      Two  consecutive  slashes  anywhere  on  a  line  cause  the
  299. remainder  of  the  line  to  be  ignored.   This  is  useful for
  300. inserting comments.
  301.  
  302.      Names of variables are formed by a letter, followed  by  any
  303. number of letters and digits, but only the first 4 characters are
  304. remembered.
  305.  
  306.      The special character  prime  (')  is  used  to  denote  the
  307. transpose of a matrix, so
  308.  
  309.    x = x'
  310.  
  311. changes the row vector above into the column vector
  312.  
  313.    X     =
  314.  
  315.      -1.3000
  316.       0.8000
  317.       3.1416
  318.  
  319.  
  320.      Individual matrix elements may be  referenced  by  enclosing
  321. their  subscripts  in  parentheses.  When any element is changed,
  322. the entire matrix is reprinted.  For  example,  using  the  above
  323. matrix,
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333. MATLAB, page 5
  334.  
  335.  
  336.  
  337.    a(3,3) = a(1,3) + a(3,1)
  338.  
  339. results in
  340.  
  341.    A     =
  342.  
  343.        1.    2.    3.
  344.        4.    5.    6.
  345.        7.    8.   10.
  346.  
  347.  
  348.      Addition, subtraction and  multiplication  of  matrices  are
  349. denoted  by  +, -, and * .  The operations are performed whenever
  350. the matrices have the proper dimensions.  For example,  with  the
  351. above  A  and  x,  the  expressions  A  + x and x*A are incorrect
  352. because A is 3 by 3 and x is now 3 by 1.  However,
  353.  
  354.    b = A*x
  355.  
  356. is correct and results in the output
  357.  
  358.    B     =
  359.  
  360.       9.7248
  361.      17.6496
  362.      28.7159
  363.  
  364. Note that both upper and lower case letters are allowed for input
  365. (on  those  systems  which  have  both),  but  that lower case is
  366. converted to upper case.
  367.  
  368.      There are two "matrix division" symbols in MATLAB,  and / .
  369. (If  your  terminal  does not have a backslash, use $ instead, or
  370. see CHAR.) If A and B are matrices, then AB and  B/A  correspond
  371. formally  to left and right multiplication of B by the inverse of
  372. A , that is inv(A)*B and B*inv(A), but  the  result  is  obtained
  373. directly  without  the computation of the inverse.  In the scalar
  374. case, 31 and 1/3 have the  same  value,  namely  one-third.   In
  375. general,  AB  denotes the solution X to the equation A*X = B and
  376. B/A denotes the solution to X*A = B.
  377.  
  378.      Left division, AB, is defined whenever B has as  many  rows
  379. as   A  .   If  A  is  square,  it  is  factored  using  Gaussian
  380. elimination.   The  factors  are  used  to  solve  the  equations
  381. A*X(:,j) = B(:,j) where B(:,j) denotes the j-th column of B.  The
  382. result is a matrix X with the same dimensions  as  B.   If  A  is
  383. nearly  singular  (according  to the LINPACK condition estimator,
  384. RCOND), a warning message is printed.  If A is not square, it  is
  385. factored   using   Householder   orthogonalization   with  column
  386. pivoting.   The  factors  are  used  to  solve  the   under-   or
  387. overdetermined equations in a least squares sense.  The result is
  388. an m by n matrix X where m is the number of columns of A and n is
  389. the  number  of  columns  of  B .  Each column of X has at most k
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399. MATLAB, page 6
  400.  
  401.  
  402.  
  403. nonzero components, where k is the effective rank of A .
  404.  
  405.      Right division,  B/A,  can  be  defined  in  terms  of  left
  406. division by  B/A = (A'B')'.
  407.  
  408.      For example, since our vector  b   was computed as  A*x, the
  409. statement
  410.  
  411.    y = Ab
  412.  
  413. results in
  414.  
  415.    Y     =
  416.  
  417.      -1.3000
  418.       0.8000
  419.       3.1416
  420.  
  421. Of course,  y  is  not  exactly  equal  to   x   because  of  the
  422. roundoff  errors involved in both  A*x  and  Ab , but we are not
  423. printing enough digits to see the difference.  The result of  the
  424. statement
  425.  
  426.    e = x - y
  427.  
  428. depends upon the particular computer being used.  In one case  it
  429. produces
  430.  
  431.    E     =
  432.  
  433.       1.0e-15 *
  434.  
  435.         .3053
  436.        -.2498
  437.         .0000
  438.  
  439. The quantity 1.0e-15 is a scale factor which multiplies  all  the
  440. components  which  follow.  Thus our vectors  x  and  y  actually
  441. agree to about 15 decimal places on this computer.
  442.  
  443.      It   is   also   possible   to   obtain   element-by-element
  444. multiplicative  operations.  If A and B have the same dimensions,
  445. then A .* B denotes the matrix  whose  elements  are  simply  the
  446. products  of the individual elements of A and B . The expressions
  447. A ./ B and A . B give the quotients of the individual elements.
  448.  
  449.      There are several possible output formats.  The statement
  450.  
  451.    long, x
  452.  
  453. results in
  454.  
  455.    X     =
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465. MATLAB, page 7
  466.  
  467.  
  468.  
  469.       -1.300000000000000
  470.         .800000000000000
  471.        3.141592653589793
  472.  
  473. The statement
  474.  
  475.    short
  476.  
  477. restores the original format.
  478.  
  479.      The expression A**p means  A  to  the  p-th  power.   It  is
  480. defined  if  A  is a square matrix and p is a scalar.  If p is an
  481. integer greater than one,  the  power  is  computed  by  repeated
  482. multiplication.   For  other values of p the calculation involves
  483. the eigenvalues and eigenvectors of A.
  484.  
  485.      Previously defined matrices and matrix  expressions  can  be
  486. used inside brackets to generate larger matrices, for example
  487.  
  488.    C = <A, b; <4 2 0>*x, x'>
  489.  
  490. results in
  491.  
  492.  
  493.    C     =
  494.  
  495.       1.0000   2.0000   3.0000   9.7248
  496.       4.0000   5.0000   6.0000  17.6496
  497.       7.0000   8.0000  10.0000  28.7159
  498.      -3.6000  -1.3000   0.8000   3.1416
  499.  
  500.  
  501.      There are four predefined variables,  EPS,  FLOP,  RAND  and
  502. EYE.  The variable EPS is used as a tolerance is determining such
  503. things as near singularity and rank.  Its initial  value  is  the
  504. distance  from  1.0  to the next largest floating point number on
  505. the particular computer being used.  The user may reset  this  to
  506. any other value, including zero. EPS is changed by CHOP, which is
  507. described in section 12.
  508.  
  509.      The value of RAND is a random variable, with a choice  of  a
  510. uniform or a normal distribution.
  511.  
  512.      The name EYE is used  in  place  of  I  to  denote  identity
  513. matrices  because  I is often used as a subscript or as sqrt(-1).
  514. The dimensions of EYE are determined by context.  For example,
  515.  
  516.    B = A + 3*EYE
  517.  
  518. adds 3 to the diagonal elements of A and
  519.  
  520.    X = EYE/A
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531. MATLAB, page 8
  532.  
  533.  
  534.  
  535. is one of several ways in MATLAB to invert a matrix.
  536.  
  537.      FLOP provides a  count  of  the  number  of  floating  point
  538. operations, or "flops", required for each calculation.
  539.  
  540.      A statement may consist of an  expression  alone,  in  which
  541. case a variable named ANS is created and the result stored in ANS
  542. for possible future use.  Thus
  543.  
  544.    AA - EYE
  545.  
  546. is the same as
  547.  
  548.    ANS = AA - EYE
  549.  
  550. (Roundoff error usually causes this result  to  be  a  matrix  of
  551. "small" numbers, rather than all zeros.)
  552.  
  553.      All computations are done  using  either  single  or  double
  554. precision  real  arithmetic,  whichever  is  appropriate  for the
  555. particular computer.  There  is  no  mixed-precision  arithmetic.
  556. The  Fortran  COMPLEX  data type is not used because many systems
  557. create  unnecessary  underflows  and   overflows   with   complex
  558. operations and because some systems do not allow double precision
  559. complex arithmetic.
  560.  
  561.  
  562. 2.  MATLAB functions
  563.  
  564.      Much of MATLAB's computational power comes from the  various
  565. matrix functions available.  The current list includes:
  566.  
  567.    INV(A)          - Inverse.
  568.    DET(A)          - Determinant.
  569.    COND(A)         - Condition number.
  570.    RCOND(A)        - A measure of nearness to singularity.
  571.    EIG(A)          - Eigenvalues and eigenvectors.
  572.    SCHUR(A)        - Schur triangular form.
  573.    HESS(A)         - Hessenberg or tridiagonal form.
  574.    POLY(A)         - Characteristic polynomial.
  575.    SVD(A)          - Singular value decomposition.
  576.    PINV(A,eps)     - Pseudoinverse with optional tolerance.
  577.    RANK(A,eps)     - Matrix rank with optional tolerance.
  578.    LU(A)           - Factors from Gaussian elimination.
  579.    CHOL(A)         - Factor from Cholesky factorization.
  580.    QR(A)           - Factors from Householder orthogonalization.
  581.    RREF(A)         - Reduced row echelon form.
  582.    ORTH(A)         - Orthogonal vectors spanning range of A.
  583.    EXP(A)          - e to the A.
  584.    LOG(A)          - Natural logarithm.
  585.    SQRT(A)         - Square root.
  586.    SIN(A)          - Trigonometric sine.
  587.    COS(A)          - Cosine.
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597. MATLAB, page 9
  598.  
  599.  
  600.  
  601.    ATAN(A)         - Arctangent.
  602.    ROUND(A)        - Round the elements to nearest integers.
  603.    ABS(A)          - Absolute value of the elements.
  604.    REAL(A)         - Real parts of the elements.
  605.    IMAG(A)         - Imaginary parts of the elements.
  606.    CONJG(A)        - Complex conjugate.
  607.    SUM(A)          - Sum of the elements.
  608.    PROD(A)         - Product of the elements.
  609.    DIAG(A)         - Extract or create diagonal matrices.
  610.    TRIL(A)         - Lower triangular part of A.
  611.    TRIU(A)         - Upper triangular part of A.
  612.    NORM(A,p)       - Norm with p = 1, 2 or 'Infinity'.
  613.    EYE(m,n)        - Portion of identity matrix.
  614.    RAND(m,n)       - Matrix with random elements.
  615.    ONES(m,n)       - Matrix of all ones.
  616.    MAGIC(n)        - Interesting test matrices.
  617.    HILBERT(n)      - Inverse Hilbert matrices.
  618.    ROOTS(C)        - Roots of polynomial with coefficients C.
  619.    DISPLAY(A,p)    - Print base p representation of A.
  620.    KRON(A,B)       - Kronecker tensor product of A and B.
  621.    PLOT(X,Y)       - Plot Y as a function of X .
  622.    RAT(A)          - Find "simple" rational approximation to A.
  623.    USER(A)         - Function defined by external program.
  624.  
  625.      Some of these functions have different interpretations  when
  626. the  argument  is  a  matrix  or  a  vector and some of them have
  627. additional optional arguments.  Details are  given  in  the  HELP
  628. document in the appendix.
  629.  
  630.      Several of these functions can  be  used  in  a  generalized
  631. assignment statement with two or three variables on the left hand
  632. side.  For example
  633.  
  634.    <X,D> = EIG(A)
  635.  
  636. stores the eigenvectors of A in  the  matrix  X  and  a  diagonal
  637. matrix containing the eigenvalues in the matrix D.  The statement
  638.  
  639.    EIG(A)
  640.  
  641. simply computes the eigenvalues and stores them in ANS.
  642.  
  643.      Future versions of MATLAB will probably  include  additional
  644. functions, since they can easily be added to the system.
  645.  
  646.  
  647.  
  648. 3.  Rows, columns and submatrices
  649.  
  650.  
  651.      Individual elements of a matrix can be  accessed  by  giving
  652. their subscripts in parentheses, eg. A(1,2), x(i), TAB(ind(k)+1).
  653. An expression used as a  subscript  is  rounded  to  the  nearest
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663. MATLAB, page 10
  664.  
  665.  
  666.  
  667. integer.
  668.  
  669.      Individual rows and columns can be accessed  using  a  colon
  670. ':' (or a '') for the free subscript. For example, A(1,:) is the
  671. first row of A and A(:,j) is the j-th column.  Thus
  672.  
  673.    A(i,:) = A(i,:) + c*A(k,:)
  674.  
  675. adds c times the k-th row of A to the i-th row.
  676.  
  677.      The colon is used in several other ways in MATLAB,  but  all
  678. of the uses are based on the following definition.
  679.  
  680.    j:k    is the same as  <j, j+1, ..., k>
  681.    j:k    is empty if  j > k .
  682.    j:i:k  is the same as  <j, j+i, j+2i, ..., k>
  683.    j:i:k  is empty if  i > 0 and j > k or if i < 0 and j < k .
  684.  
  685. The colon is usually used with integers, but it  is  possible  to
  686. use arbitrary real scalars as well.  Thus
  687.  
  688.    1:4  is the same as  <1, 2, 3, 4>
  689.    0: 0.1: 0.5 is the same as <0.0, 0.1, 0.2, 0.3, 0.4, 0.5>
  690.  
  691.  
  692.      In general, a subscript can be a vector.  If  X  and  V  are
  693. vectors, then X(V) is <X(V(1)), X(V(2)), ..., X(V(n))> . This can
  694. also be used with matrices.  If V has m components and  W  has  n
  695. components,  then  A(V,W)  is  the  m by n matrix formed from the
  696. elements of A whose subscripts are  the  elements  of  V  and  W.
  697. Combinations  of the colon notation and the indirect subscripting
  698. allow manipulation of various submatrices. For example,
  699.  
  700.    A(<1,5>,:) = A(<5,1>,:)  interchanges rows 1 and 5 of A.
  701.    A(2:k,1:n)  is the submatrix formed from rows 2 through k
  702.       and columns 1 through n of A .
  703.    A(:,<3 1 2>)  is a permutation of the first three columns.
  704.  
  705.  
  706.      The notation A(:) has a special meaning.  On the right  hand
  707. side  of  an assignment statement, it denotes all the elements of
  708. A, regarded as a single column.  When an expression  is  assigned
  709. to  A(:),  the  current  dimensions  of  A,  rather  than  of the
  710. expression, are used.
  711.  
  712.  
  713. 4.  FOR, WHILE and IF
  714.  
  715.  
  716.      The FOR clause allows statements to be repeated  a  specific
  717. number of times.  The general form is
  718.  
  719.    FOR variable = expr,  statement, ..., statement, END
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729. MATLAB, page 11
  730.  
  731.  
  732.  
  733. The END and the comma before it may be omitted.  In general,  the
  734. expression  may be a matrix, in which case the columns are stored
  735. one at a time in the variable and the following statements, up to
  736. the  END or the end of the line, are executed.  The expression is
  737. often of the form j:k, and its "columns" are simply  the  scalars
  738. from j to k.  Some examples (assume n has already been assigned a
  739. value):
  740.  
  741.    for i = 1:n, for j = 1:n, A(i,j) = 1/(i+j-1);
  742.  
  743. generates the Hilbert matrix.
  744.  
  745.    for j = 2:n-1, for i = j:n-1, ...
  746.       A(i,j) = 0; end; A(j,j) = j; end; A
  747.  
  748. changes all but the "outer edge" of the lower triangle  and  then
  749. prints the final matrix.
  750.  
  751.    for h = 1.0: -0.1: -1.0, (<h, cos(pi*h)>)
  752.  
  753. prints a table of cosines.
  754.  
  755.    <X,D> = EIG(A); for v = X, v, A*v
  756.  
  757. displays eigenvectors, one at a time.
  758.  
  759.      The  WHILE  clause  allows  statements  to  be  repeated  an
  760. indefinite number of times.  The general form is
  761.  
  762.    WHILE expr relop expr,   statement,..., statement, END
  763.  
  764. where relop is =, <,  >,  <=,  >=,  or  <>  (not  equal)  .   The
  765. statements  are  repeatedly  executed  as  long  as the indicated
  766. comparison between the real parts of the first components of  the
  767. two  expressions  is true.  Here are two examples.  (Exercise for
  768. the reader: What do these segments do?)
  769.  
  770.    eps = 1;
  771.    while 1 + eps > 1, eps = eps/2;
  772.    eps = 2*eps
  773.  
  774.    E = 0*A;  F = E + EYE; n = 1;
  775.    while NORM(E+F-E,1) > 0, E = E + F; F = A*F/n; n = n + 1;
  776.    E
  777.  
  778.  
  779.      The IF clause allows conditional  execution  of  statements.
  780. The general form is
  781.  
  782.    IF expr relop expr,   statement, ..., statement,
  783.       ELSE statement, ..., statement
  784.  
  785. The first group of statements are executed  if  the  relation  is
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795. MATLAB, page 12
  796.  
  797.  
  798.  
  799. true  and the second group are executed if the relation is false.
  800. The ELSE and the statements following it  may  be  omitted.   For
  801. example,
  802.  
  803.    if abs(i-j) = 2, A(i,j) = 0;
  804.  
  805.  
  806. 5.  Commands, text, files and macros.
  807.  
  808.  
  809.      MATLAB has several commands which control the output  format
  810. and the overall execution of the system.
  811.  
  812.      The HELP command allows on-line access to short portions  of
  813. text   describing   various  operations,  functions  and  special
  814. characters.   The  entire  HELP  document  is  reproduced  in  an
  815. appendix.
  816.  
  817.      Results are usually printed in a scaled fixed  point  format
  818. that shows 4 or 5 significant figures.  The commands SHORT, LONG,
  819. SHORT E, LONG E and LONG Z alter the output format,  but  do  not
  820. alter the precision of the computations or the internal storage.
  821.  
  822.      The WHO, WHAT and WHY commands provide information about the
  823. functions and variables that are currently defined.
  824.  
  825.      The CLEAR command erases all variables,  except  EPS,  FLOP,
  826. RAND  and  EYE.  The  statement  A = <> indicates that a "0 by 0"
  827. matrix is to be stored in A.  This causes A to be erased so  that
  828. its storage can be used for other variables.
  829.  
  830.      The RETURN and EXIT commands cause return to the  underlying
  831. operating system through the Fortran RETURN statement.
  832.  
  833.      MATLAB has a limited facility for handling text.  Any string
  834. of characters delineated by quotes (with two quotes used to allow
  835. one quote within the string) is saved  as  a  vector  of  integer
  836. values  with '1' = 1, 'A' = 10, ' ' = 36, etc. (The complete list
  837. is in the appendix under CHAR.) For example
  838.  
  839.    '2*A + 3'  is the same as  <2 43 10 36 41 36 3>
  840.  
  841. It is possible,  though  seldom  very  meaningful,  to  use  such
  842. strings  in matrix operations.  More frequently, the text is used
  843. as a special argument to various functions.
  844.  
  845.    NORM(A,'inf')    computes the infinity norm of A .
  846.    DISPLAY(T)       prints the text stored in T .
  847.    EXEC('file')     obtains MATLAB input from an external file.
  848.    SAVE('file')     stores all the current variables in a file.
  849.    LOAD('file')     retrieves all the variables from a file.
  850.    PRINT('file',X)  prints X on a file.
  851.    DIARY('file')    makes a copy of the complete MATLAB session.
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861. MATLAB, page 13
  862.  
  863.  
  864.  
  865.  
  866.      The text can also be used in a limited  string  substitution
  867. macro  facility.   If a variable, say T, contains the source text
  868. for a MATLAB statement or expression, then the construction
  869.  
  870.    > T <
  871.  
  872. causes T to be executed or evaluated.  For example
  873.  
  874.    T = '2*A + 3';
  875.    S = 'B = >T< + 5'
  876.    A = 4;
  877.    > S <
  878.  
  879. produces
  880.  
  881.    B     =
  882.  
  883.       16.
  884.  
  885. Some other examples are given under MACRO in the appendix.   This
  886. facility  is  useful for fairly short statements and expressions.
  887. More complicated MATLAB "programs" should use the EXEC facility.
  888.  
  889.      The operations which access external files cannot be handled
  890. in  a  completely  machine-independent manner by portable Fortran
  891. code.  It  is  necessary  for  each  particular  installation  to
  892. provide  a  subroutine  which associates external text files with
  893. Fortran logical unit numbers.
  894.  
  895.  
  896. 6.  Census example
  897.  
  898.  
  899.      Our  first  extended   example   involves   predicting   the
  900. population  of  the  United States in 1980 using extrapolation of
  901. various fits to the census data from 1900  through  1970.   There
  902. are eight observations, so we begin with the MATLAB statement
  903.  
  904.    n = 8
  905.  
  906. The values of the dependent variable, the population in millions,
  907. can be entered with
  908.  
  909.    y = < 75.995   91.972  105.711  123.203   ...
  910.         131.669  150.697  179.323  203.212>'
  911.  
  912. In order to produce a reasonably scaled matrix,  the  independent
  913. variable,  time,  is transformed from the interval \1900,1970! to
  914. \-1.00,0.75!.  This can be accomplished directly with
  915.  
  916.    t = -1.0:0.25:0.75
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927. MATLAB, page 14
  928.  
  929.  
  930.  
  931. or in a fancier, but perhaps clearer, way with
  932.  
  933.    t = 1900:10:1970;   t = (t - 1940*ones(t))/40
  934.  
  935. Either of these is equivalent to
  936.  
  937.    t = <-1 -.75 -.50 -.25 0 .25 .50 .75>
  938.  
  939.      The interpolating polynomial of  degree   n-1   involves  an
  940. Vandermonde  matrix  of  order   n   with  elements that might be
  941. generated by
  942.  
  943.    for i = 1:n, for j = 1:n, a(i,j) = t(i)**(j-1);
  944.  
  945. However, this results in an error caused by 0**0  when  i = 5 and
  946. j = 1 .  The preferable approach is
  947.  
  948.    A = ones(n,n);
  949.    for i = 1:n, for j = 2:n, a(i,j) = t(i)*a(i,j-1);
  950.  
  951. Now the statement
  952.  
  953.    cond(A)
  954.  
  955. produces the output
  956.  
  957.    ANS   =
  958.  
  959.       1.1819E+03
  960.  
  961. which indicates that transformation  of  the  time  variable  has
  962. resulted in a reasonably well conditioned matrix.
  963.  
  964.      The statement
  965.  
  966.    c = Ay
  967.  
  968. results in
  969.  
  970.    C     =
  971.  
  972.      131.6690
  973.       41.0406
  974.      103.5396
  975.      262.4535
  976.     -326.0658
  977.     -662.0814
  978.      341.9022
  979.      533.6373
  980.  
  981. These are the coefficients in the interpolating polynomial
  982.  
  983.                           n-1
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993. MATLAB, page 15
  994.  
  995.  
  996.  
  997.       c  + c t + ... + c t
  998.        1    2           n
  999.  
  1000. Our transformation of the time variable has resulted in   t  =  1
  1001. corresponding  to  the year 1980.  Consequently, the extrapolated
  1002. population is simply the sum of the coefficients.   This  can  be
  1003. computed by
  1004.  
  1005.    p = sum(c)
  1006.  
  1007. The result is
  1008.  
  1009.    P     =
  1010.  
  1011.      426.0950
  1012.  
  1013. which indicates a 1980 population of over 426 million.   Clearly,
  1014. using  the seventh degree interpolating polynomial to extrapolate
  1015. even a fairly short distance beyond the end of the data  interval
  1016. is not a good idea.
  1017.  
  1018.      The coefficients in least squares  fits  by  polynomials  of
  1019. lower  degree can be computed using fewer than  n  columns of the
  1020. matrix.
  1021.  
  1022.    for k = 1:n, c = A(:,1:k)y,  p = sum(c)
  1023.  
  1024. would produce the coefficients of these  fits,  as  well  as  the
  1025. resulting  extrapolated  population.   If we do not want to print
  1026. all the coefficients, we can simply generate  a  small  table  of
  1027. populations  predicted  by  polynomials  of  degrees zero through
  1028. seven.  We also compute the maximum deviation between the  fitted
  1029. and observed values.
  1030.  
  1031.    for k = 1:n, X = A(:,1:k);  c = Xy;  ...
  1032.       d(k) = k-1;  p(k) = sum(c);  e(k) = norm(X*c-y,'inf');
  1033.    <d, p, e>
  1034.  
  1035. The resulting output is
  1036.  
  1037.       0   132.7227  70.4892
  1038.       1   211.5101   9.8079
  1039.       2   227.7744   5.0354
  1040.       3   241.9574   3.8941
  1041.       4   234.2814   4.0643
  1042.       5   189.7310   2.5066
  1043.       6   118.3025   1.6741
  1044.       7   426.0950   0.0000
  1045.  
  1046. The zeroth degree fit, 132.7 million, is the result of fitting  a
  1047. constant  to  the  data  and  is simply the average.  The results
  1048. obtained with polynomials of degree one through four  all  appear
  1049. reasonable.   The  maximum  deviation  of  the degree four fit is
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059. MATLAB, page 16
  1060.  
  1061.  
  1062.  
  1063. slightly greater than the degree three, even though  the  sum  of
  1064. the  squares  of the deviations is less.  The coefficients of the
  1065. highest powers in the fits of degree five and six turn out to  be
  1066. negative  and  the predicted populations of less than 200 million
  1067. are probably unrealistic.  The hopefully absurd prediction of the
  1068. interpolating polynomial concludes the table.
  1069.  
  1070.      We  wish  to  emphasize  that  roundoff   errors   are   not
  1071. significant  here.  Nearly identical results would be obtained on
  1072. other computers, or with other algorithms.   The  results  simply
  1073. indicate   the  difficulties  associated  with  extrapolation  of
  1074. polynomial fits of even modest degree.
  1075.  
  1076.      A stabilized fit by  a  seventh  degree  polynomial  can  be
  1077. obtained  using  the  pseudoinverse,  but  it  requires  a fairly
  1078. delicate choice of a tolerance. The statement
  1079.  
  1080.    s = svd(A)
  1081.  
  1082. produces the singular values
  1083.  
  1084.    S     =
  1085.  
  1086.       3.4594
  1087.       2.2121
  1088.       1.0915
  1089.       0.4879
  1090.       0.1759
  1091.       0.0617
  1092.       0.0134
  1093.       0.0029
  1094.  
  1095. We see that the last three singular values are less  than  0.1  ,
  1096. consequently,   A   can be approximately by a matrix of rank five
  1097. with an error less than 0.1 .  The Moore-Penrose pseudoinverse of
  1098. this  rank  five  matrix  is  obtained  from  the  singular value
  1099. decomposition with the following statements
  1100.  
  1101.    c = pinv(A,0.1)*y, p = sum(c), e = norm(a*c-y,'inf')
  1102.  
  1103. The output is
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125. MATLAB, page 17
  1126.  
  1127.  
  1128.  
  1129.    C     =
  1130.  
  1131.     134.7972
  1132.      67.5055
  1133.      23.5523
  1134.       9.2834
  1135.       3.0174
  1136.       2.6503
  1137.      -2.8808
  1138.       3.2467
  1139.  
  1140.    P     =
  1141.  
  1142.     241.1720
  1143.  
  1144.    E     =
  1145.  
  1146.       3.9469
  1147.  
  1148. The resulting seventh degree polynomial  has  coefficients  which
  1149. are much smaller than those of the interpolating polynomial given
  1150. earlier.  The predicted population and the maximum deviation  are
  1151. reasonable.   Any  choice  of the tolerance between the fifth and
  1152. sixth singular values would produce the same results, but choices
  1153. outside this range result in pseudoinverses of different rank and
  1154. do not work as well.
  1155.  
  1156.      The one term exponential approximation
  1157.  
  1158.      y(t) = k exp(pt)
  1159.  
  1160. can  be  transformed  into  a  linear  approximation  by   taking
  1161. logarithms.
  1162.  
  1163.      log(y(t)) = log k + pt
  1164.  
  1165.                = c  + c t
  1166.                   1    2
  1167.  
  1168. The following segment makes use of the fact that a function of  a
  1169. vector is the function applied to the individual components.
  1170.  
  1171.    X = A(:,1:2);
  1172.    c = Xlog(y)
  1173.    p = exp(sum(c))
  1174.    e = norm(exp(X*c)-y,'inf')
  1175.  
  1176. The resulting output is
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191. MATLAB, page 18
  1192.  
  1193.  
  1194.  
  1195.    C     =
  1196.  
  1197.       4.9083
  1198.       0.5407
  1199.  
  1200.    P     =
  1201.  
  1202.     232.5134
  1203.  
  1204.    E     =
  1205.  
  1206.       4.9141
  1207.  
  1208. The   predicted   population   and   maximum   deviation   appear
  1209. satisfactory  and  indicate  that  the  exponential  model  is  a
  1210. reasonable one to consider.
  1211.  
  1212.      As a curiousity, we return to  the  degree  six  polynomial.
  1213. Since  the coefficient of the high order term is negative and the
  1214. value of the polynomial at t = 1 is positive, it must have a root
  1215. at some value of  t  greater than one.  The statements
  1216.  
  1217.    X = A(:,1:7);
  1218.    c = Xy;
  1219.    c = c(7:-1:1);  //reverse the order of the coefficients
  1220.    z = roots(c)
  1221.  
  1222. produce
  1223.  
  1224.    Z     =
  1225.  
  1226.       1.1023-  0.0000*i
  1227.       0.3021+  0.7293*i
  1228.      -0.8790+  0.6536*i
  1229.      -1.2939-  0.0000*i
  1230.      -0.8790-  0.6536*i
  1231.       0.3021-  0.7293*i
  1232.  
  1233. There is only one real, positive root.  The corresponding time on
  1234. the original scale is
  1235.  
  1236.    1940 + 40*real(z(1))
  1237.  
  1238.      =  1984.091
  1239.  
  1240. We conclude that the United States population should become  zero
  1241. early in February of 1984.
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257. MATLAB, page 19
  1258.  
  1259.  
  1260.  
  1261. 7.  Partial differential equation example
  1262.  
  1263.  
  1264.      Our second extended example is a boundary value problem  for
  1265. Laplace's equation.  The underlying physical problem involves the
  1266. conductivity of a  medium  with  cylindrical  inclusions  and  is
  1267. considered by Keller and Sachs \7!.
  1268.  
  1269.      Find a function  u(x,y)  satisfying Laplace's equation
  1270.  
  1271.                u   + u   = 0
  1272.                 xx    yy
  1273.  
  1274. The domain is a unit square with a quarter circle of  radius  rho
  1275. removed from one corner.  There are Neumann conditions on the top
  1276. and bottom edges and Dirichlet conditions on the remainder of the
  1277. boundary.
  1278.  
  1279.  
  1280.                          u  = 0
  1281.                           n
  1282.  
  1283.                      -------------
  1284.                                  .
  1285.                                  .
  1286.                                   .
  1287.                                    .  u = 1
  1288.                                      .
  1289.                                         .
  1290.                                            .
  1291.              u = 0                          
  1292.                                             
  1293.                                             
  1294.                                               u = 1
  1295.                                             
  1296.                                             
  1297.                                             
  1298.                      ------------------------
  1299.  
  1300.                               u  = 0
  1301.                                n
  1302.  
  1303.  
  1304. The effective conductivity of an medium  is  then  given  by  the
  1305. integral along the left edge,
  1306.  
  1307.                             1
  1308.                  sigma = integral  u (0,y) dy
  1309.                            0        n
  1310.  
  1311. It is of interest to study the relation between  the  radius  rho
  1312. and  the  conductivity  sigma.   In particular, as rho approaches
  1313. one, sigma becomes infinite.
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323. MATLAB, page 20
  1324.  
  1325.  
  1326.  
  1327.      Keller and Sachs use a finite difference approximation.  The
  1328. following  technique  makes  use of the fact that the equation is
  1329. actually Laplace's equation and leads to a  much  smaller  matrix
  1330. problem to solve.
  1331.  
  1332.      Consider an approximate solution of the form
  1333.  
  1334.                  n      2j-1
  1335.            u =  sum  c r    cos(2j-1)t
  1336.                 j=1   j
  1337.  
  1338. where  r,t  are polar coordinates (t is theta).  The coefficients
  1339. are to be determined.  For any set of coefficients, this function
  1340. already satisfies the differential  equation  because  the  basis
  1341. functions  are  harmonic;  it  satisfies  the  normal  derivative
  1342. boundary condition on the bottom edge of the  domain  because  we
  1343. used   cos  t   in  preference  to   sin t ; and it satisfies the
  1344. boundary condition on the left edge of the domain because we  use
  1345. only odd multiples of  t .
  1346.  
  1347.      The computational task is to find coefficients  so that  the
  1348. boundary  conditions on the remaining edges are satisfied as well
  1349. as possible.  To accomplish this, pick  m  points  (r,t)  on  the
  1350. remaining edges.  It is desirable to have  m > n  and in practice
  1351. we usually choose m  to be two or three times as large  as   n  .
  1352. Typical  values  of  n  are 10 or 20 and of  m  are 20 to 60.  An
  1353. m  by  n  matrix  A  is generated.  The  i,j  element is the j-th
  1354. basis  function,  or its normal derivative, evaluated at the i-th
  1355. boundary point.  A right hand side with  m   components  is  also
  1356. generated.   In this example, the elements of the right hand side
  1357. are either zero or one.   The  coefficients  are  then  found  by
  1358. solving the overdetermined set of equations
  1359.  
  1360.             Ac = b
  1361.  
  1362. in a least squares sense.
  1363.  
  1364.      Once the coefficients have been determined, the  approximate
  1365. solution  is  defined  everywhere  on  the  domain.   It  is then
  1366. possible to compute the effective conductivity sigma .  In  fact,
  1367. a very simple formula results,
  1368.  
  1369.                      n       j-1
  1370.            sigma =  sum  (-1)   c
  1371.                     j=1          j
  1372.  
  1373.      To use MATLAB for this problem, the following  "program"  is
  1374. first  stored  in  the  local computer file system, say under the
  1375. name "PDE".
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389. MATLAB, page 21
  1390.  
  1391.  
  1392.  
  1393. //Conductivity example.
  1394. //Parameters ---
  1395.    rho       //radius of cylindrical inclusion
  1396.    n         //number of terms in solution
  1397.    m         //number of boundary points
  1398. //initialize operation counter
  1399.    flop = <0 0>;
  1400. //initialize variables
  1401.    m1 = round(m/3);   //number of points on each straight edge
  1402.    m2 = m - m1;       //number of points with Dirichlet conditions
  1403.    pi = 4*atan(1);
  1404. //generate points in Cartesian coordinates
  1405.    //right hand edge
  1406.    for i = 1:m1, x(i) = 1; y(i) = (1-rho)*(i-1)/(m1-1);
  1407.    //top edge
  1408.    for i = m2+1:m, x(i) = (1-rho)*(m-i)/(m-m2-1); y(i) = 1;
  1409.    //circular edge
  1410.    for i = m1+1:m2, t = pi/2*(i-m1)/(m2-m1+1); ...
  1411.       x(i) = 1-rho*sin(t);  y(i) = 1-rho*cos(t);
  1412. //convert to polar coordinates
  1413.    for i = 1:m-1, th(i) = atan(y(i)/x(i));  ...
  1414.       r(i) = sqrt(x(i)**2+y(i)**2);
  1415.    th(m) = pi/2;  r(m) = 1;
  1416. //generate matrix
  1417.    //Dirichlet conditions
  1418.    for i = 1:m2, for j = 1:n, k = 2*j-1; ...
  1419.       a(i,j) = r(i)**k*cos(k*th(i));
  1420.    //Neumann conditions
  1421.    for i = m2+1:m, for j = 1:n, k = 2*j-1; ...
  1422.       a(i,j) = k*r(i)**(k-1)*sin((k-1)*th(i));
  1423. //generate right hand side
  1424.    for i = 1:m2, b(i) = 1;
  1425.    for i = m2+1:m, b(i) = 0;
  1426. //solve for coefficients
  1427.    c = Ab
  1428. //compute effective conductivity
  1429.    c(2:2:n) = -c(2:2:n);
  1430.    sigma = sum(c)
  1431. //output total operation count
  1432.    ops = flop(2)
  1433.  
  1434.  
  1435.  
  1436.  
  1437.      The program can be used within MATLAB by setting  the  three
  1438. parameters and then accessing the file.  For example,
  1439.  
  1440.    rho = .9;
  1441.    n = 15;
  1442.    m = 30;
  1443.    exec('PDE')
  1444.  
  1445. The resulting output is
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455. MATLAB, page 22
  1456.  
  1457.  
  1458.  
  1459.    RHO   =
  1460.  
  1461.       .9000
  1462.  
  1463.    N     =
  1464.  
  1465.     15.
  1466.  
  1467.    M     =
  1468.  
  1469.     30.
  1470.  
  1471.    C     =
  1472.  
  1473.       2.2275
  1474.      -2.2724
  1475.       1.1448
  1476.       0.1455
  1477.      -0.1678
  1478.      -0.0005
  1479.      -0.3785
  1480.       0.2299
  1481.       0.3228
  1482.      -0.2242
  1483.      -0.1311
  1484.       0.0924
  1485.       0.0310
  1486.      -0.0154
  1487.      -0.0038
  1488.  
  1489.    SIGM  =
  1490.  
  1491.       5.0895
  1492.  
  1493.    OPS   =
  1494.  
  1495.       16204.
  1496.  
  1497.  
  1498.      A total of 16204 floating point operations were necessary to
  1499. set  up  the  matrix,  solve for the coefficients and compute the
  1500. conductivity.  The operation count  is  roughly  proportional  to
  1501. m*n**2.   The  results obtained for sigma as a function of rho by
  1502. this approach are essentially the same as those obtained  by  the
  1503. finite   difference  technique  of  Keller  and  Sachs,  but  the
  1504. computational effort involved is much less.
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521. MATLAB, page 23
  1522.  
  1523.  
  1524.  
  1525. 8.  Eigenvalue sensitivity example
  1526.  
  1527.  
  1528.      In this example, we construct a matrix whose eigenvalues are
  1529. moderately  sensitive  to  perturbations  and  then  analyze that
  1530. sensitivity. We begin with the statement
  1531.  
  1532.    B = <3 0 7; 0 2 0; 0 0 1>
  1533.  
  1534. which produces
  1535.  
  1536.    B     =
  1537.  
  1538.        3.    0.    7.
  1539.        0.    2.    0.
  1540.        0.    0.    1.
  1541.  
  1542.  
  1543.      Obviously, the eigenvalues of B are 1, 2 and 3 .   Moreover,
  1544. since   B  is  not  symmetric,  these  eigenvalues  are  slightly
  1545. sensitive to perturbation.  (The value b(1,3) = 7 was  chosen  so
  1546. that the elements of the matrix A below are less than 1000.)
  1547.  
  1548.      We now generate a similarity transformation to disguise  the
  1549. eigenvalues and make them more sensitive.
  1550.  
  1551.    L = <1 0 0; 2 1 0; -3 4 1>, M = LL'
  1552.  
  1553.    L     =
  1554.  
  1555.        1.    0.    0.
  1556.        2.    1.    0.
  1557.       -3.    4.    1.
  1558.  
  1559.    M     =
  1560.  
  1561.        1.0000    2.0000   -3.0000
  1562.       -2.0000   -3.0000   10.0000
  1563.       11.0000   18.0000  -48.0000
  1564.  
  1565. The matrix M has determinant equal to 1 and is  moderately  badly
  1566. conditioned.  The similarity transformation is
  1567.  
  1568.    A = M*B/M
  1569.  
  1570.    A     =
  1571.  
  1572.      -64.0000   82.0000   21.0000
  1573.      144.0000 -178.0000  -46.0000
  1574.     -771.0000  962.0000  248.0000
  1575.  
  1576. Because  det(M) = 1 , the elements of  A  would be exact integers
  1577. if there were no roundoff.  So,
  1578.  
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587. MATLAB, page 24
  1588.  
  1589.  
  1590.  
  1591.    A = round(A)
  1592.  
  1593.    A     =
  1594.  
  1595.      -64.   82.   21.
  1596.      144. -178.  -46.
  1597.     -771.  962.  248.
  1598.  
  1599.  
  1600.      This, then, is our test matrix.  We can now  forget  how  it
  1601. was generated and analyze its eigenvalues.
  1602.  
  1603.    <X,D> = eig(A)
  1604.  
  1605.    D     =
  1606.  
  1607.        3.0000    0.0000    0.0000
  1608.        0.0000    1.0000    0.0000
  1609.        0.0000    0.0000    2.0000
  1610.  
  1611.    X     =
  1612.  
  1613.        -.0891    3.4903   41.8091
  1614.         .1782   -9.1284  -62.7136
  1615.        -.9800   46.4473  376.2818
  1616.  
  1617. Since A is similar to B, its eigenvalues are also  1,  2  and  3.
  1618. They  happen  to  be  computed  in  another  order by the EISPACK
  1619. subroutines.  The fact that the  columns  of  X,  which  are  the
  1620. eigenvectors,  are  so  far  from  being orthonormal is our first
  1621. indication that  the  eigenvalues  are  sensitive.  To  see  this
  1622. sensitivity, we display more figures of the computed eigenvalues.
  1623.  
  1624.    long, diag(D)
  1625.  
  1626.    ANS   =
  1627.  
  1628.       2.999999999973599
  1629.       1.000000000015625
  1630.       2.000000000011505
  1631.  
  1632. We see that, on this computer, the last five significant  figures
  1633. are  contaminated  by  roundoff  error.  A  somewhat  superficial
  1634. explanation of this is provided by
  1635.  
  1636.    short,  cond(X)
  1637.  
  1638.    ANS   =
  1639.  
  1640.       3.2216e+05
  1641.  
  1642. The condition number of X gives an upper bound for  the  relative
  1643. error  in  the  computed  eigenvalues.   However,  this condition
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653. MATLAB, page 25
  1654.  
  1655.  
  1656.  
  1657. number is affected by scaling.
  1658.  
  1659.    X = X/diag(X(3,:)),  cond(X)
  1660.  
  1661.    X     =
  1662.  
  1663.         .0909     .0751     .1111
  1664.        -.1818    -.1965    -.1667
  1665.        1.0000    1.0000    1.0000
  1666.  
  1667.    ANS   =
  1668.  
  1669.       1.7692e+03
  1670.  
  1671.  
  1672.      Rescaling the eigenvectors so that their last components are
  1673. all  equal  to  one  has  two consequences. The condition of X is
  1674. decreased by over two orders of magnitude.  (This  is  about  the
  1675. minimum condition that can be obtained by such diagonal scaling.)
  1676. Moreover, it is now apparent  that  the  three  eigenvectors  are
  1677. nearly parallel.
  1678.  
  1679.      More  detailed  information  on  the  sensitivity   of   the
  1680. individual eigenvalues involves the left eigenvectors.
  1681.  
  1682.    Y = inv(X'),  Y'*A*X
  1683.  
  1684.    Y     =
  1685.  
  1686.     -511.5000  259.5000  252.0000
  1687.      616.0000 -346.0000 -270.0000
  1688.      159.5000  -86.5000  -72.0000
  1689.  
  1690.    ANS   =
  1691.  
  1692.        3.0000     .0000     .0000
  1693.         .0000    1.0000     .0000
  1694.         .0000     .0000    2.0000
  1695.  
  1696. We are now in a position to  compute  the  sensitivities  of  the
  1697. individual eigenvalues.
  1698.  
  1699.    for j = 1:3, c(j) = norm(Y(:,j))*norm(X(:,j)); end,  C
  1700.  
  1701.    C     =
  1702.  
  1703.      833.1092
  1704.      450.7228
  1705.      383.7564
  1706.  
  1707. These three numbers are the reciprocals of  the  cosines  of  the
  1708. angles  between the left and right eigenvectors.  It can be shown
  1709. that  perturbation  of  the  elements  of  A  can  result  in   a
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719. MATLAB, page 26
  1720.  
  1721.  
  1722.  
  1723. perturbation of the j-th eigenvalue which is c(j) times as large.
  1724. In  this  example,  the  first   eigenvalue   has   the   largest
  1725. sensitivity.
  1726.  
  1727.      We now proceed to show that A is close to a  matrix  with  a
  1728. double eigenvalue.  The direction of the required perturbation is
  1729. given by
  1730.  
  1731.    E = -1.e-6*Y(:,1)*X(:,1)'
  1732.  
  1733.    E     =
  1734.  
  1735.       1.0e-03 *
  1736.  
  1737.         .0465    -.0930     .5115
  1738.        -.0560     .1120    -.6160
  1739.        -.0145     .0290    -.1595
  1740.  
  1741. With some trial and error which we do not show,  we  bracket  the
  1742. point  where  two  eigenvalues of a perturbed A coalesce and then
  1743. become complex.
  1744.  
  1745.    eig(A + .4*E),  eig(A + .5*E)
  1746.  
  1747.    ANS   =
  1748.  
  1749.        1.1500
  1750.        2.5996
  1751.        2.2504
  1752.  
  1753.    ANS   =
  1754.  
  1755.       2.4067 +  .1753*i
  1756.       2.4067 -  .1753*i
  1757.       1.1866 + 0.0000*i
  1758.  
  1759. Now, a bisecting search, driven by the imaginary part of  one  of
  1760. the eigenvalues, finds the point where two eigenvalues are nearly
  1761. equal.
  1762.  
  1763.    r = .4;  s = .5;
  1764.  
  1765.    while s-r > 1.e-14, t = (r+s)/2; d = eig(A+t*E); ...
  1766.      if imag(d(1))=0, r = t; else, s = t;
  1767.  
  1768.    long,  T
  1769.  
  1770.    T     =
  1771.  
  1772.         .450380734134507
  1773.  
  1774.  
  1775.      Finally, we display the perturbed matrix, which is obviously
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785. MATLAB, page 27
  1786.  
  1787.  
  1788.  
  1789. close  to the original, and its pair of nearly equal eigenvalues.
  1790. (We have dropped a few digits from the long output.)
  1791.  
  1792.    A+t*E,  eig(A+t*E)
  1793.  
  1794.    A
  1795.  
  1796.     -63.999979057   81.999958114   21.000230369
  1797.     143.999974778 -177.999949557  -46.000277434
  1798.    -771.000006530  962.000013061  247.999928164
  1799.  
  1800.    ANS   =
  1801.  
  1802.       2.415741150
  1803.       2.415740621
  1804.       1.168517777
  1805.  
  1806.  
  1807.      The  first  two  eigenvectors  of  A  +   t*E   are   almost
  1808. indistinguishable  indicating that the perturbed matrix is almost
  1809. defective.
  1810.  
  1811.    <X,D> = eig(A+t*E);  X = X/diag(X(3,:))
  1812.  
  1813.    X     =
  1814.  
  1815.        .096019578     .096019586    .071608466
  1816.       -.178329614    -.178329608   -.199190520
  1817.       1.000000000    1.000000000   1.000000000
  1818.  
  1819.    short,  cond(X)
  1820.  
  1821.    ANS   =
  1822.  
  1823.       3.3997e+09
  1824.  
  1825.  
  1826. 9.  Syntax diagrams
  1827.  
  1828.  
  1829.      A formal description of the language acceptable  to  MATLAB,
  1830. as well as a flow chart of the MATLAB program, is provided by the
  1831. syntax diagrams or syntax graphs of Wirth \6!.  There are  eleven
  1832. non-terminal symbols in the language:
  1833.  
  1834.    line, statement, clause, expression, term,
  1835.    factor, number, integer, name, command, text .
  1836.  
  1837. The diagrams define each of the non-terminal  symbols  using  the
  1838. others and the terminal symbols:
  1839.  
  1840.    letter -- A through Z,
  1841.    digit  -- 0 through 9,
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851. MATLAB, page 28
  1852.  
  1853.  
  1854.  
  1855.    char   -- ( ) ; : + - * /  = . , < >
  1856.    quote  -- '
  1857.  
  1858.  
  1859. line
  1860.  
  1861.        -----> statement >----
  1862.                              
  1863.        -----> clause >-------
  1864.                              
  1865. ------------> expr >--------------->
  1866.                              
  1867.       -----> command >------ 
  1868.                              
  1869.       -> > >-> expr >-> < >- 
  1870.                              
  1871.       ---------------------- 
  1872.                                
  1873.              -< ; <-         
  1874.      --------       ---------
  1875.               -< , <-
  1876.  
  1877.  
  1878.  
  1879.  
  1880. statement
  1881.  
  1882.      -> name >--------------------------------
  1883.                                              
  1884.                         --> : >---         
  1885.                                            
  1886.                -> ( >----> expr >----> ) >-
  1887.                                             
  1888. -----                  -----< , <----       --> = >--> expr >--->
  1889.                                               
  1890.             --< , <---                      
  1891.                                             
  1892.      -> < >---> name >---> > >----------------
  1893.  
  1894.  
  1895.  
  1896.  
  1897.  
  1898.  
  1899.  
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917. MATLAB, page 29
  1918.  
  1919.  
  1920.  
  1921. clause
  1922.  
  1923.      ---> FOR   >---> name >---> = >---> expr >--------------
  1924.                                                              
  1925.       -> WHILE >-                                          
  1926.      -           -> expr >----------------------           
  1927.       -> IF    >-                                    
  1928. -----                        <   <=  =   <>  >=  >           ---->
  1929.                                                        
  1930.                              ----------------------> expr >--
  1931.                                                              
  1932.      ---> ELSE  >--------------------------------------------
  1933.                                                              
  1934.      ---> END   >--------------------------------------------
  1935.  
  1936.  
  1937.  
  1938.  
  1939. expr
  1940.  
  1941.        -> + >-
  1942.               
  1943. ---------------------> term >---------->
  1944.                                
  1945.        -> - >-      -< + <-  
  1946.                                
  1947.                     ---< - <---
  1948.                               
  1949.                        -< : <-
  1950.  
  1951.  
  1952.  
  1953.  
  1954. term
  1955.  
  1956. ---------------------> factor >---------------------->
  1957.                                            
  1958.                      -< * <-             
  1959.           -------           -------  
  1960.         --       ---< / <---       --
  1961.            -< . <-           -< . <-
  1962.                       -<  <-
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983. MATLAB, page 30
  1984.  
  1985.  
  1986.  
  1987. factor
  1988.  
  1989.      ----------------> number >---------------
  1990.                                               
  1991.      -> name >--------------------------------
  1992.                                              
  1993.                         --> : >---         
  1994.                                            
  1995.                -> ( >----> expr >----> ) >-
  1996.                                             
  1997.                        -----< , <----       
  1998.                                               
  1999. -----------------> ( >-----> expr >-----> ) >-------------->
  2000.                                                        
  2001.                        --------------        -> ' >- 
  2002.                                                        
  2003.      ------------> < >----> expr >----> > >-           
  2004.                                                        
  2005.                          --<   <---                    
  2006.                                                        
  2007.                          --< ; <---                    
  2008.                                                        
  2009.                          --< , <---                    
  2010.                                                          
  2011.      ------------> > >-----> expr >-----> < >-           
  2012.                                                          
  2013.      -----> factor >---> ** >---> factor >----           
  2014.                                                           
  2015.      ------------> ' >-----> text >-----> ' >-------------
  2016.  
  2017.  
  2018.  
  2019.  
  2020. number
  2021.  
  2022.     ----------                          -> + >-
  2023.                                                
  2024. -----> int >-----> . >---> int >-----> E >---------> int >---->
  2025.                                                       
  2026.                                        -> - >-        
  2027.                                                         
  2028.              ---------------------------------------------
  2029.  
  2030.  
  2031.  
  2032.  
  2033. int
  2034.  
  2035. ------------> digit >----------->
  2036.                      
  2037.           -----------
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049. MATLAB, page 31
  2050.  
  2051.  
  2052.  
  2053.  
  2054.  
  2055. name
  2056.  
  2057.                   --< letter <--
  2058.                                 
  2059. ------> letter >--------------------->
  2060.                                 
  2061.                   --< digit  <--
  2062.  
  2063.  
  2064.  
  2065.  
  2066. command
  2067.  
  2068.                         --> name >--
  2069.                                     
  2070. --------> name >------------------------>
  2071.                                     
  2072.                         --> char >--
  2073.                                     
  2074.                         ---> ' >----
  2075.  
  2076. text
  2077.  
  2078.                 -> letter >--
  2079.                              
  2080.                 -> digit >---
  2081. ----------------             -------------->
  2082.                -> char >----   
  2083.                                
  2084.                -> ' >-> ' >-   
  2085.                                  
  2086.             ---------------------
  2087.  
  2088.  
  2089. 10.  The parser-interpreter
  2090.  
  2091.  
  2092.      The structure of the parser-interpreter is similar  to  that
  2093. of  Wirth's  compiler  \6! for his simple language, PL/0 , except
  2094. that MATLAB  is  programmed  in  Fortran,  which  does  not  have
  2095. explicit recursion.  The interrelation of the primary subroutines
  2096. is shown in the following diagram.
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115. MATLAB, page 32
  2116.  
  2117.  
  2118.  
  2119.       MAIN
  2120.         
  2121.       MATLAB    --CLAUSE
  2122.                    
  2123.       PARSE-------EXPR----TERM----FACTOR
  2124.                                   
  2125.                     --------------
  2126.                                   
  2127.                   STACK1  STACK2  STACKG
  2128.                 
  2129.                 --STACKP--PRINT
  2130.                 
  2131.                 --COMAND
  2132.                 
  2133.                 
  2134.                           --CGECO
  2135.                           
  2136.                           --CGEFA
  2137.                           
  2138.                 --MATFN1----CGESL
  2139.                           
  2140.                           --CGEDI
  2141.                           
  2142.                           --CPOFA
  2143.                 
  2144.                 
  2145.                           --IMTQL2
  2146.                           
  2147.                           --HTRIDI
  2148.                           
  2149.                 --MATFN2----HTRIBK
  2150.                           
  2151.                           --CORTH
  2152.                           
  2153.                           --COMQR3
  2154.                 
  2155.                 
  2156.                 --MATFN3-----CSVDC
  2157.                 
  2158.                 
  2159.                           --CQRDC
  2160.                 --MATFN4--
  2161.                           --CQRSL
  2162.                 
  2163.                 
  2164.                           --FILES
  2165.                 --MATFN5--
  2166.                            --SAVLOD
  2167.  
  2168.      Subroutine  PARSE  controls  the  interpretation   of   each
  2169. statement.    It  calls  subroutines  that  process  the  various
  2170. syntactic  quantities  such  as  command,  expression,  term  and
  2171. factor.   A  fairly  simple  program stack mechanism allows these
  2172.  
  2173.  
  2174.  
  2175.  
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181. MATLAB, page 33
  2182.  
  2183.  
  2184.  
  2185. subroutines to recursively "call"  each  other  along  the  lines
  2186. allowed  by  the  syntax  diagrams.   The  four STACK subroutines
  2187. manage the variable memory  and  perform  elementary  operations,
  2188. such as matrix addition and transposition.
  2189.  
  2190.      The  four  subroutines  MATFN1  though  MATFN4  are   called
  2191. whenever  "serious"  matrix  computations are required.  They are
  2192. interface routines which call the  various  LINPACK  and  EISPACK
  2193. subroutines.  MATFN5 primarily handles the file access tasks.
  2194.  
  2195.      Two large real arrays, STKR and STKI, are used to store  all
  2196. the  matrices.   Four integer arrays are used to store the names,
  2197. the row and column dimensions, and the  pointers  into  the  real
  2198. stacks.  The following diagram illustrates this storage scheme.
  2199.  
  2200. TOP         IDSTK     MSTK NSTK LSTK               STKR       STKI
  2201.  --      -- -- -- --   --   --   --              --------   --------
  2202.   --->                 ----------->                 
  2203.  --      -- -- -- --   --   --   --              --------   --------
  2204.                                                       
  2205.          -- -- -- --   --   --   --              --------   --------
  2206.               .         .    .    .                  .          .
  2207.               .         .    .    .                  .          .
  2208.               .         .    .    .                  .          .
  2209.          -- -- -- --   --   --   --              --------   --------
  2210. BOT                                                   
  2211.  --      -- -- -- --   --   --   --              --------   --------
  2212.   ---> X        2  1   ----------->  3.14     0.00  
  2213.  --      -- -- -- --   --   --   --              --------   --------
  2214.          A        2  2   ---------     0.00     1.00  
  2215.          -- -- -- --   --   --   --             --------   --------
  2216.          E P S    1  1   -------   -> 11.00     0.00  
  2217.          -- -- -- --   --   --   --             --------   --------
  2218.          F L O P  1  2   ------      21.00     0.00  
  2219.          -- -- -- --   --   --   --            --------   --------
  2220.          E Y E   -1 -1   ---        12.00     0.00  
  2221.          -- -- -- --   --   --   --           --------   --------
  2222.          R A N D  1  1   -         22.00     0.00  
  2223.          -- -- -- --   --   --   --          --------   --------
  2224.                                            -> 1.E-15    0.00  
  2225.                                               --------   --------
  2226.                                             ->  0.00     0.00  
  2227.                                                --------   --------
  2228.                                                 0.00     0.00  
  2229.                                                --------   --------
  2230.                                              ->  1.00     0.00  
  2231.                                                 --------   --------
  2232.                                             ---> URAND     0.00  
  2233.                                                  --------   --------
  2234.  
  2235.      The top portion of the stack is used for temporary variables
  2236. and the bottom portion for saved variables.  The figure shows the
  2237. situation after the line
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247. MATLAB, page 34
  2248.  
  2249.  
  2250.  
  2251.    A = <11,12; 21,22>,  x = <3.14, sqrt(-1)>'
  2252.  
  2253. has been processed.  The four permanent names,  EPS,  FLOP,  RAND
  2254. and  EYE,  occupy the last four positions of the variable stacks.
  2255. RAND has dimensions 1 by 1, but whenever its value is  requested,
  2256. a random number generator is used instead.  EYE has dimensions -1
  2257. by -1 to indicate that the actual dimensions must  be  determined
  2258. later by context.  The two saved variables have dimensions 2 by 2
  2259. and 2 by 1 and so take up a total of 6 locations.
  2260.  
  2261.      Subsequent statements involving  A  and  x  will  result  in
  2262. temporary  copies  being  made in the top of the stack for use in
  2263. the actual calculations.  Whenever the top of the  stack  reaches
  2264. the  bottom,  a  message  indicating  memory has been exceeded is
  2265. printed, but the current variables are not affected.
  2266.  
  2267.      This modular structure makes it possible to implement MATLAB
  2268. on a system with a limited amount of memory.  The object code for
  2269. the MATFN's and the LINPACK-EISPACK subroutines is rarely needed.
  2270. Although  it  is  not  standard,  many  Fortran operating systems
  2271. provide some overlay mechanism so that this code is brought  into
  2272. the  main memory only when required.  The variables, which occupy
  2273. a relatively small portion of the memory, remain in place,  while
  2274. the subroutines which process them are loaded a few at a time.
  2275.  
  2276.  
  2277. 11.  The numerical algorithms
  2278.  
  2279.  
  2280.      The algorithms underlying the  basic  MATLAB  functions  are
  2281. described  in the LINPACK and EISPACK guides \1-3!. The following
  2282. list gives the subroutines used by these functions.
  2283.  
  2284.    INV(A)          - CGECO,CGEDI
  2285.    DET(A)          - CGECO,CGEDI
  2286.    LU(A)           - CGEFA
  2287.    RCOND(A)        - CGECO
  2288.    CHOL(A)         - CPOFA
  2289.    SVD(A)          - CSVDC
  2290.    COND(A)         - CSVDC
  2291.    NORM(A,2)       - CSVDC
  2292.    PINV(A,eps)     - CSVDC
  2293.    RANK(A,eps)     - CSVDC
  2294.    QR(A)           - CQRDC,CQRSL
  2295.    ORTH(A)         - CQRDC,CSQSL
  2296.    AB and B/A     - CGECO,CGESL if A is square.
  2297.                    - CQRDC,CQRSL if A is not square.
  2298.    EIG(A)          - HTRIDI,IMTQL2,HTRIBK if A is Hermitian.
  2299.                    - CORTH,COMQR2         if A is not Hermitian.
  2300.    SCHUR(A)        - same as EIG.
  2301.    HESS(A)         - same as EIG.
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313. MATLAB, page 35
  2314.  
  2315.  
  2316.  
  2317.      Minor modifications were made to all these subroutines.  The
  2318. LINPACK  routines  were  changed  to  replace the Fortran complex
  2319. arithmetic with explicit references to real and imaginary  parts.
  2320. Since  most of the floating point arithmetic is concentrated in a
  2321. few low-level subroutines which perform  vector  operations  (the
  2322. Basic  Linear  Algebra  Subprograms),  this  was not an extensive
  2323. change.  It also facilitated implementation of the FLOP and  CHOP
  2324. features  which count and optionally truncate each floating point
  2325. operation.
  2326.  
  2327.      The EISPACK subroutine COMQR2 was modified to  allow  access
  2328. to  the  Schur  triangular  form, ordinarily just an intermediate
  2329. result.   IMTQL2  was  modified  to  make  computation   of   the
  2330. eigenvectors   optional.    Both  subroutines  were  modified  to
  2331. eliminate the machine-dependent accuracy parameter  and  all  the
  2332. EISPACK subroutines were changed to include FLOP and CHOP.
  2333.  
  2334.      The algorithms employed for the  POLY  and  ROOTS  functions
  2335. illustrate  an  interesting  aspect  of  the  modern  approach to
  2336. eigenvalue computation.   POLY(A)  generates  the  characteristic
  2337. polynomial  of  A  and  ROOTS(POLY(A))  finds  the  roots of that
  2338. polynomial, which are, of course, the eigenvalues of A . But both
  2339. POLY  and  ROOTS  use  EISPACK eigenvalues subroutines, which are
  2340. based on similarity transformations.  So the  classical  approach
  2341. which  characterizes  eigenvalues  as roots of the characteristic
  2342. polynomial is actually reversed.
  2343.  
  2344.      If A is an n by n matrix, POLY(A) produces the  coefficients
  2345. C(1) through C(n+1), with C(1) = 1, in
  2346.  
  2347.       DET(z*EYE-A) = C(1)*z**n + ... + C(n)*z + C(n+1) .
  2348.  
  2349. The algorithm can be expressed compactly using MATLAB:
  2350.  
  2351.       Z = EIG(A);
  2352.       C = 0*ONES(n+1,1);  C(1) = 1;
  2353.       for j = 1:n, C(2:j+1) = C(2:j+1) - Z(j)*C(1:j);
  2354.       C
  2355.  
  2356. This recursion is easily derived by expanding the product
  2357.  
  2358.       (z - z(1))*(z - z(2))* ... * (z-z(n)) .
  2359.  
  2360. It is possible to prove that POLY(A) produces the coefficients in
  2361. the  characteristic  polynomial of a matrix within roundoff error
  2362. of  A .  This is true even if the  eigenvalues  of  A  are  badly
  2363. conditioned.    The  traditional  algorithms  for  obtaining  the
  2364. characteristic polynomial which do not use the eigenvalues do not
  2365. have such satisfactory numerical properties.
  2366.  
  2367.      If C is a vector with n+1  components,  ROOTS(C)  finds  the
  2368. roots of the polynomial of degree n ,
  2369.  
  2370.  
  2371.  
  2372.  
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379. MATLAB, page 36
  2380.  
  2381.  
  2382.  
  2383.        p(z) = C(1)*z**n + ... + C(n)*z + C(n+1) .
  2384.  
  2385. The algorithm simply involves computing the  eigenvalues  of  the
  2386. companion matrix:
  2387.  
  2388.       A = 0*ONES(n,n)
  2389.       for j = 1:n, A(1,j) = -C(j+1)/C(1);
  2390.       for i = 2:n, A(i,i-1) = 1;
  2391.       EIG(A)
  2392.  
  2393. It is possible to prove that the results produced are  the  exact
  2394. eigenvalues  of  a  matrix within roundoff error of the companion
  2395. matrix A, but this does not mean that they are the exact roots of
  2396. a  polynomial with coefficients within roundoff error of those in
  2397. C .  There are more accurate, more efficient methods for  finding
  2398. polynomial  roots,  but  this  approach has the crucial advantage
  2399. that it does not require very much additional code.
  2400.  
  2401.      The elementary functions EXP, LOG, SQRT, SIN, COS  and  ATAN
  2402. are  applied  to  square  matrices  by  diagonalizing the matrix,
  2403. applying the functions to the  individual  eigenvalues  and  then
  2404. transforming back.  For example, EXP(A) is computed by
  2405.  
  2406.       <X,D> = EIG(A);
  2407.       for j = 1:n, D(j,j) = EXP(D(j,j));
  2408.       X*D/X
  2409.  
  2410. This is essentially method number 14  out  of  the  19  'dubious'
  2411. possibilities described in \8!.  It is dubious because it doesn't
  2412. always work.  The matrix of eigenvectors  X  can  be  arbitrarily
  2413. badly  conditioned  and  all  accuracy lost in the computation of
  2414. X*D/X.  A warning message is printed if RCOND(X) is  very  small,
  2415. but  this  only  catches the extreme cases.  An example of a case
  2416. not detected is when A has a double eigenvalue, but theoretically
  2417. only  one  linearly  independent  eigenvector associated with it.
  2418. The computed eigenvalues will be separated by  something  on  the
  2419. order  of the square root of the roundoff level.  This separation
  2420. will be reflected in RCOND(X) which will probably  not  be  small
  2421. enough to trigger the error message.  The computed EXP(A) will be
  2422. accurate to only half precision.  Better methods  are  known  for
  2423. computing EXP(A), but they do not easily extend to the other five
  2424. functions and would require a considerable amount  of  additional
  2425. code.
  2426.  
  2427.      The expression A**p is evaluated by repeated  multiplication
  2428. if p is an integer greater than 1.  Otherwise it is evaluated by
  2429.  
  2430.       <X,D> = EIG(A);
  2431.       for j = 1:n, D(j,j) = EXP(p*LOG(D(j,j)))
  2432.       X*D/X
  2433.  
  2434. This suffers from the same potential loss of  accuracy  if  X  is
  2435. badly conditioned.  It was partly for this reason that the case p
  2436.  
  2437.  
  2438.  
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445. MATLAB, page 37
  2446.  
  2447.  
  2448.  
  2449. = 1 is included in the general case.  Comparison of A**1  with  A
  2450. gives some idea of the loss of accuracy for other values of p and
  2451. for the elementary functions.
  2452.  
  2453.      RREF, the reduced row echelon form, is of some  interest  in
  2454. theoretical  linear algebra, although it has little computational
  2455. value.  It is included in MATLAB for  pedagogical  reasons.   The
  2456. algorithm  is essentially Gauss-Jordan elimination with detection
  2457. of negligible columns applied to rectangular matrices.
  2458.  
  2459.      There are three separate places in MATLAB where the rank  of
  2460. a  matrix  is  implicitly  computed:  in RREF(A), in AB for non-
  2461. square A, and in  the  pseudoinverse  PINV(A).   Three  different
  2462. algorithms  with  three  different criteria for negligibility are
  2463. used and so it is possible that three different values  could  be
  2464. produced for the same matrix.  With RREF(A), the rank of A is the
  2465. number of nonzero rows.  The elimination algorithm used for  RREF
  2466. is  the  fastest of the three rank-determining algorithms, but it
  2467. is the least sophisticated numerically and  the  least  reliable.
  2468. With  AB,  the  algorithm  is  essentially  that used by example
  2469. subroutine SQRST  in  chapter  9  of  the  LINPACK  guide.   With
  2470. PINV(A),   the   algorithm   is   based  on  the  singular  value
  2471. decomposition and is described  in  chapter  11  of  the  LINPACK
  2472. guide.   The  SVD  algorithm  is the most time-consuming, but the
  2473. most reliable and is therefore also used for RANK(A).
  2474.  
  2475.      The  uniformly  distributed  random  numbers  in  RAND   are
  2476. obtained  from  the  machine-independent  random number generator
  2477. URAND described in \9!.  It is possible  to  switch  to  normally
  2478. distributed   random   numbers,   which   are  obtained  using  a
  2479. transformation also described in \9!.
  2480.  
  2481.      The computation of
  2482.  
  2483.                 2    2
  2484.           sqrt(a  + b )
  2485.  
  2486. is  required  in  many  matrix  algorithms,  particularly   those
  2487. involving  complex  arithmetic.   A  new approach to carrying out
  2488. this operation is described by Moler and Morrison \10!.  It is  a
  2489. cubically  convergent  algorithm  which  starts with  a  and  b ,
  2490. rather than with their squares, and  thereby  avoids  destructive
  2491. arithmetic underflows and overflows.  In MATLAB, the algorithm is
  2492. used for complex modulus, Euclidean vector norm, plane rotations,
  2493. and  the  shift  calculation in the eigenvalue and singular value
  2494. iterations.
  2495.  
  2496.  
  2497. 12.  FLOP and CHOP
  2498.  
  2499.      Detailed information about the amount of  work  involved  in
  2500. matrix  calculations  and  the  resulting accuracy is provided by
  2501. FLOP and CHOP.  The basic unit of work is the "flop", or floating
  2502.  
  2503.  
  2504.  
  2505.  
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511. MATLAB, page 38
  2512.  
  2513.  
  2514.  
  2515. point operation.  Roughly, one flop is one execution of a Fortran
  2516. statement like
  2517.  
  2518.       S = S + X(I)*Y(I)
  2519.  
  2520. or
  2521.  
  2522.       Y(I) = Y(I) + T*X(I)
  2523.  
  2524. In other words, it consists of one floating point multiplication,
  2525. together  with  one  floating  point  addition and the associated
  2526. indexing and storage reference operations.
  2527.  
  2528.      MATLAB will  print  the  number  of  flops  required  for  a
  2529. particular statement when the statement is terminated by an extra
  2530. comma.  For example, the line
  2531.  
  2532.       n = 20;  RAND(n)*RAND(n);,
  2533.  
  2534. ends with an extra comma.  Two  20  by  20  random  matrices  are
  2535. generated  and  multiplied  together.   The result is assigned to
  2536. ANS, but the semicolon suppresses its printing.  The only  output
  2537. is
  2538.  
  2539.         8800 flops
  2540.  
  2541. This is  n**3 + 2*n**2  flops,  n**2  for each random matrix  and
  2542. n**3 for the product.
  2543.  
  2544.      FLOP is a predefined vector with two components.  FLOP(1) is
  2545. the number of flops used by the most recently executed statement,
  2546. except that statements with zero flops are ignored.  For example,
  2547. after executing the previous statement,
  2548.  
  2549.       flop(1)/n**3
  2550.  
  2551. results in
  2552.  
  2553.       ANS   =
  2554.  
  2555.           1.1000
  2556.  
  2557.  
  2558.      FLOP(2) is the cumulative total of all the flops used  since
  2559. the beginning of the MATLAB session.  The statement
  2560.  
  2561.       FLOP = <0 0>
  2562.  
  2563. resets the total.
  2564.  
  2565.      There are several difficulties  associated  with  keeping  a
  2566. precise  count  of  floating  point  operations.  An  addition or
  2567. subtraction that is not paired with a multiplication  is  usually
  2568.  
  2569.  
  2570.  
  2571.  
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577. MATLAB, page 39
  2578.  
  2579.  
  2580.  
  2581. counted as a flop. The same is true of an isolated multiplication
  2582. that is  not  paired  with  an  addition.   Each  floating  point
  2583. division counts as a flop.  But the number of operations required
  2584. by system dependent library functions such as square root  cannot
  2585. be  counted, so most elementary functions are arbitrarily counted
  2586. as using only one flop.
  2587.  
  2588.      The  biggest  difficulty  occurs  with  complex  arithmetic.
  2589. Almost  all operations on the real parts of matrices are counted.
  2590. However, the operations on the  complex  parts  of  matrices  are
  2591. counted only when they involve nonzero elements.  This means that
  2592. simple operations on nonreal matrices require only about twice as
  2593. many  flops as the same operations on real matrices.  This factor
  2594. of two is not necessarily an accurate  measure  of  the  relative
  2595. costs of real and complex arithmetic.
  2596.  
  2597.      The result of each floating  point  operation  may  also  be
  2598. "chopped" to simulate a computer with a shorter word length.  The
  2599. details of this chopping operation depend upon the format of  the
  2600. floating point word.  Usually, the fraction in the floating point
  2601. word  can  be  regarded  as  consisting  of  several   octal   or
  2602. hexadecimal digits.  The least significant of these digits can be
  2603. set to zero by a logical masking operation.  Thus the statement
  2604.  
  2605.       CHOP(p)
  2606.  
  2607. causes the  p  least significant octal or hexadecimal  digits  in
  2608. the  result  of  each floating point operation to be set to zero.
  2609. For example, if the computer being  used  has  an  IBM  360  long
  2610. floating  point  word with 14 hexadecimal digits in the fraction,
  2611. then CHOP(8) results in simulation of  a  computer  with  only  6
  2612. hexadecimal  digits  in the fraction, i.e. a short floating point
  2613. word. On a computer such as the CDC 6600 with  16  octal  digits,
  2614. CHOP(8)  results in about the same accuracy because the remaining
  2615. 8 octal digits represent the same number of bits as 6 hexadecimal
  2616. digits.
  2617.  
  2618.      Some idea of the effect of CHOP on any particular system can
  2619. be obtained by executing the following statements.
  2620.  
  2621.       long,   t = 1/10
  2622.       long z, t = 1/10
  2623.       chop(8)
  2624.       long,   t = 1/10
  2625.       long z, t = 1/10
  2626.  
  2627.  
  2628.      The following Fortran subprograms illustrate more details of
  2629. FLOP  and CHOP. The first subprogram is a simplified example of a
  2630. system-dependent function used within MATLAB itself.  The  common
  2631. variable  FLP  is essentially the first component of the variable
  2632. FLOP.  The common variable CHP is initially zero, but it  is  set
  2633. to  p  by the statement  CHOP(p).  To shorten the DATA statement,
  2634.  
  2635.  
  2636.  
  2637.  
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643. MATLAB, page 40
  2644.  
  2645.  
  2646.  
  2647. we assume there are only 6 hexadecimal digits.  We also assume an
  2648. extension  of  Fortran  that  allows .AND. to be used as a binary
  2649. operation between two real variables.
  2650.  
  2651.       REAL FUNCTION FLOP(X)
  2652.       REAL X
  2653.       INTEGER FLP,CHP
  2654.       COMMON FLP,CHP
  2655.       REAL MASK(5)
  2656.       DATA MASK/ZFFFFFFF0,ZFFFFFF00,ZFFFFF000,ZFFFF0000,ZFFF00000/
  2657.       FLP = FLP + 1
  2658.       IF (CHP .EQ. 0) FLOP = X
  2659.       IF (CHP .GE. 1 .AND. CHP .LE. 5) FLOP = X .AND. MASK(CHP)
  2660.       IF (CHP .GE. 6) FLOP = 0.0
  2661.       RETURN
  2662.       END
  2663.  
  2664.  
  2665.      The following subroutine illustrates a typical  use  of  the
  2666. previous  function  within MATLAB.  It is a simplified version of
  2667. the Basic Linear Algebra Subprogram that adds a  scalar  multiple
  2668. of  one  vector  to another.  We assume here that the vectors are
  2669. stored with a memory increment of one.
  2670.  
  2671.       SUBROUTINE SAXPY(N,TR,TI,XR,XI,YR,YI)
  2672.       REAL TR,TI,XR(N),XI(N),YR(N),YI(N),FLOP
  2673.       IF (N .LE. 0) RETURN
  2674.       IF (TR .EQ. 0.0 .AND. TI .EQ. 0.0) RETURN
  2675.       DO 10 I = 1, N
  2676.          YR(I) = FLOP(YR(I) + TR*XR(I) - TI*XI(I))
  2677.          YI(I) = YI(I) + TR*XI(I) + TI*XR(I)
  2678.          IF (YI(I) .NE. 0.0D0) YI(I) = FLOP(YI(I))
  2679.    10 CONTINUE
  2680.       RETURN
  2681.       END
  2682.  
  2683.  
  2684.      The  saxpy  operation  is  perhaps  the   most   fundamental
  2685. operation  within  LINPACK.  It is used in the computation of the
  2686. LU, the QR and the  SVD  factorizations,  and  in  several  other
  2687. places.   We  see  that  adding  a  multiple of one vector with n
  2688. components to another uses n flops if the vectors  are  real  and
  2689. between  n  and  2*n  flops if the vectors have nonzero imaginary
  2690. components.
  2691.  
  2692.      The permanent MATLAB variable EPS is reset by the  statement
  2693. CHOP(p).   Its new value is usually the smallest inverse power of
  2694. two that satisfies the Fortran logical test
  2695.  
  2696.             FLOP(1.0+EPS) .GT. 1.0
  2697.  
  2698. However, if EPS had been directly reset to a  larger  value,  the
  2699. old value is retained.
  2700.  
  2701.  
  2702.  
  2703.  
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709. MATLAB, page 41
  2710.  
  2711.  
  2712.  
  2713.  
  2714.  
  2715. 13.  Communicating with other programs
  2716.  
  2717.      There  are  four  different  ways  MATLAB  can  be  used  in
  2718. conjunction with other programs:
  2719.       -- USER,
  2720.       -- EXEC,
  2721.       -- SAVE and LOAD,
  2722.       -- MATZ, CALL and RETURN .
  2723.  
  2724.      Let us illustrate each of  these  by  the  following  simple
  2725. example.
  2726.  
  2727.       n = 6
  2728.       for i = 1:n, for j = 1:n, a(i,j) = abs(i-j);
  2729.       A
  2730.       X = inv(A)
  2731.  
  2732.  
  2733.      The example  A  could be introduced into MATLAB  by  writing
  2734. the following Fortran subroutine.
  2735.  
  2736.          SUBROUTINE USER(A,M,N,S,T)
  2737.          DOUBLE PRECISION A(1),S,T
  2738.          N = IDINT(A(1))
  2739.          M = N
  2740.          DO 10 J = 1, N
  2741.          DO 10 I = 1, N
  2742.             K = I + (J-1)*M
  2743.             A(K) = IABS(I-J)
  2744.       10 CONTINUE
  2745.          RETURN
  2746.          END
  2747.  
  2748. This subroutine should be compiled  and  linked  into  MATLAB  in
  2749. place   of  the  original  version  of  USER.   Then  the  MATLAB
  2750. statements
  2751.  
  2752.       n = 6
  2753.       A = user(n)
  2754.       X = inv(A)
  2755.  
  2756. do the job.
  2757.  
  2758.      The example A could be generated by  storing  the  following
  2759. text in a file named, say, EXAMPLE .
  2760.  
  2761.       for i = 1:n, for j = 1:n, a(i,j) = abs(i-j);
  2762.  
  2763. Then the MATLAB statements
  2764.  
  2765.       n = 6
  2766.  
  2767.  
  2768.  
  2769.  
  2770.  
  2771.  
  2772.  
  2773.  
  2774.  
  2775. MATLAB, page 42
  2776.  
  2777.  
  2778.  
  2779.       exec('EXAMPLE',0)
  2780.       X = inv(A)
  2781.  
  2782. have the desired effect.  The 0 as the optional second  parameter
  2783. of exec indicates that the text in the file should not be printed
  2784. on the terminal.
  2785.  
  2786.      The matrices A and X could also be  stored  in  files.   Two
  2787. separate main programs would be involved.  The first is:
  2788.  
  2789.          PROGRAM MAINA
  2790.          DOUBLE PRECISION A(10,10)
  2791.          N = 6
  2792.          DO 10 J = 1, N
  2793.          DO 10 I = 1, N
  2794.             A(I,J) = IABS(I-J)
  2795.       10 CONTINUE
  2796.          OPEN(UNIT=1,FILE='A')
  2797.          WRITE(1,101) N,N
  2798.      101 FORMAT('A   ',2I4)
  2799.          DO 20 J = 1, N
  2800.             WRITE(1,102) (A(I,J),I=1,N)
  2801.       20 CONTINUE
  2802.      102 FORMAT(4Z18)
  2803.          END
  2804.  
  2805. The OPEN statement may take different forms on different systems.
  2806. It  attaches  Fortran  logical unit number 1 to the file named A.
  2807. The FORMAT  number  102  may  also  be  system  dependent.   This
  2808. particular one is appropriate for hexadecimal computers with an 8
  2809. byte double precision floating point  word.   Check,  or  modify,
  2810. MATLAB subroutine SAVLOD.
  2811.  
  2812.      After this program is executed, enter MATLAB  and  give  the
  2813. following statements:
  2814.  
  2815.       load('A')
  2816.       X = inv(A)
  2817.       save('X',X)
  2818.  
  2819. If all goes according to plan, this will read the matrix  A  from
  2820. the  file A, invert it, store the inverse in X and then write the
  2821. matrix X on the file X .  The following program can then access X
  2822. .
  2823.  
  2824.          PROGRAM MAINX
  2825.          DOUBLE PRECISION X(10,10)
  2826.          OPEN(UNIT=1,FILE='X')
  2827.          REWIND 1
  2828.          READ (1,101) ID,M,N
  2829.      101 FORMAT(A4,2I4)
  2830.          DO 10 J = 1, N
  2831.             READ(1,102) (X(I,J),I=1,M)
  2832.  
  2833.  
  2834.  
  2835.  
  2836.  
  2837.  
  2838.  
  2839.  
  2840.  
  2841. MATLAB, page 43
  2842.  
  2843.  
  2844.  
  2845.       10 CONTINUE
  2846.      102 FORMAT(4Z18)
  2847.          ...
  2848.          ...
  2849.  
  2850.  
  2851.      The most elaborate mechanism  involves  using  MATLAB  as  a
  2852. subroutine within another program.  Communication with the MATLAB
  2853. stack is accomplished using subroutine MATZ which is  distributed
  2854. with  MATLAB,  but  which  is  not  used  by  MATLAB itself.  The
  2855. preample of MATZ is:
  2856.  
  2857.       SUBROUTINE MATZ(A,LDA,M,N,IDA,JOB,IERR)
  2858.       INTEGER LDA,M,N,IDA(1),JOB,IERR
  2859.       DOUBLE PRECISION A(LDA,N)
  2860. C
  2861. C     ACCESS MATLAB VARIABLE STACK
  2862. C     A IS AN M BY N MATRIX, STORED IN AN ARRAY WITH
  2863. C         LEADING DIMENSION LDA.
  2864. C     IDA IS THE NAME OF A.
  2865. C         IF IDA IS AN INTEGER K LESS THAN 10, THEN THE NAME IS 'A'K
  2866. C         OTHERWISE, IDA(1:4) IS FOUR CHARACTERS, FORMAT 4A1.
  2867. C     JOB =  0  GET REAL A FROM MATLAB,
  2868. C         =  1  PUT REAL A INTO MATLAB,
  2869. C         = 10  GET IMAG PART OF A FROM MATLAB,
  2870. C         = 11  PUT IMAG PART OF A INTO MATLAB.
  2871. C     RETURN WITH NONZERO IERR AFTER MATLAB ERROR MESSAGE.
  2872. C
  2873. C     USES MATLAB ROUTINES STACKG, STACKP AND ERROR
  2874.  
  2875.  
  2876.      The preample of subroutine MATLAB is:
  2877.  
  2878.  
  2879.       SUBROUTINE MATLAB(INIT)
  2880. C     INIT = 0 FOR FIRST ENTRY, NONZERO FOR SUBSEQUENT ENTRIES
  2881.  
  2882.  
  2883.      To do our example, write the following program:
  2884.  
  2885.          DOUBLE PRECISION A(10,10),X(10,10)
  2886.          INTEGER IDA(4),IDX(4)
  2887.          DATA LDA/10/
  2888.          DATA IDA/'A',' ',' ',' '/, IDX/'X',' ',' ',' '/
  2889.          CALL MATLAB(0)
  2890.          N = 6
  2891.          DO 10 J = 1, N
  2892.          DO 10 I = 1, N
  2893.             A(I,J) = IABS(I-J)
  2894.       10 CONTINUE
  2895.          CALL MATZ(A,LDA,N,N,IDA,1,IERR)
  2896.          IF (IERR .NE. 0) GO TO ...
  2897.          CALL MATLAB(1)
  2898.  
  2899.  
  2900.  
  2901.  
  2902.  
  2903.  
  2904.  
  2905.  
  2906.  
  2907. MATLAB, page 44
  2908.  
  2909.  
  2910.  
  2911.          CALL MATZ(X,LDA,N,N,IDX,0,IERR)
  2912.          IF (IERR .NE. 0) GO TO ...
  2913.          ...
  2914.          ...
  2915.  
  2916. When this program is executed, the call to MATLAB(0) produces the
  2917. MATLAB greeting, then waits for input.  The command
  2918.  
  2919.          return
  2920.  
  2921. sends control back to our  example  program.   The  matrix  A  is
  2922. generated  by the program and sent to the stack by the first call
  2923. to MATZ.  The call to MATLAB(1) produces the MATLAB prompt.  Then
  2924. the statements
  2925.  
  2926.          X = inv(A)
  2927.          return
  2928.  
  2929. will invert our matrix, put the result on the stack and  go  back
  2930. to our program.  The second call to MATZ will retrieve X .
  2931.  
  2932.      By the way, this matrix  X  is interesting. Take a  look  at
  2933. round(2*(n-1)*X).
  2934.  
  2935.  
  2936.  
  2937.  
  2938. Acknowledgement.
  2939.  
  2940.  
  2941.      Most of the work on MATLAB  has  been  carried  out  at  the
  2942. University  of  New  Mexico,  where  it is being supported by the
  2943. National Science Foundation. Additional work has been done during
  2944. visits  to  Stanford  Linear Accelerator Center, Argonne National
  2945. Laboratory and Los Alamos Scientific  Laboratory,  where  support
  2946. has been provided by NSF and the Department of Energy.
  2947.  
  2948.  
  2949. References
  2950.  
  2951. \1!  J. J. Dongarra, J. R. Bunch, C. B. Moler and G. W.  Stewart,
  2952.      LINPACK  Users'  Guide,  Society  for Industrial and Applied
  2953.      Mathematics, Philadelphia, 1979.
  2954.  
  2955. \2!  B. T. Smith, J. M. Boyle, J. J. Dongarra, B. S.  Garbow,  Y.
  2956.      Ikebe, V. C. Klema, C. B. Moler, Matrix Eigensystem Routines
  2957.      -- EISPACK Guide, Lecture Notes in Computer Science,  volume
  2958.      6, second edition, Springer-Verlag, 1976.
  2959.  
  2960. \3!  B. S. Garbow, J. M. Boyle, J.  J.  Dongarra,  C.  B.  Moler,
  2961.      Matrix  Eigensystem  Routines  --  EISPACK  Guide Extension,
  2962.      Lecture Notes in  Computer  Science,  volume  51,  Springer-
  2963.      Verlag, 1977.
  2964.  
  2965.  
  2966.  
  2967.  
  2968.  
  2969.  
  2970.  
  2971.  
  2972.  
  2973. MATLAB, page 45
  2974.  
  2975.  
  2976.  
  2977. \4!  S. Cohen and  S.  Piper,  SPEAKEASY  III  Reference  Manual,
  2978.      Speakeasy Computing Corp., Chicago, Ill., 1979.
  2979.  
  2980. \5!  J. H. Wilkinson  and  C.  Reinsch,  Handbook  for  Automatic
  2981.      Computation,  volume  II,  Linear  Algebra, Springer-Verlag,
  2982.      1971.
  2983.  
  2984. \6!  Niklaus Wirth, Algorithms  +  Data  Structures  =  Programs,
  2985.      Prentice-Hall, 1976.
  2986.  
  2987. \7!  H. B. Keller and D. Sachs, "Calculations of the Conductivity
  2988.      of  a  Medium Containing Cylindrical Inclusions", J. Applied
  2989.      Physics 35, 537-538, 1964.
  2990.  
  2991. \8!  C. B. Moler and C. F. Van Loan,  Nineteen  Dubious  Ways  to
  2992.      Compute  the  Exponential  of a Matrix, SIAM Review 20, 801-
  2993.      836, 1979.
  2994.  
  2995. \9!  G. E. Forsythe, M. A. Malcolm  and  C.  B.  Moler,  Computer
  2996.      Methods for Mathematical Computations, Prentice-Hall, 1977.
  2997.  
  2998. \10! C. B. Moler and D. R. Morrison, "Replacing square  roots  by
  2999.      Pythagorean   sums",  University  of  New  Mexico,  Computer
  3000.      Science  Department,   technical   report,   submitted   for
  3001.      publication, 1980.
  3002.  
  3003.  
  3004.  
  3005.  
  3006.  
  3007.  
  3008.  
  3009.  
  3010.  
  3011.  
  3012.  
  3013.  
  3014.  
  3015.  
  3016.  
  3017.  
  3018.  
  3019.  
  3020.  
  3021.  
  3022.  
  3023.  
  3024.  
  3025.  
  3026.  
  3027.  
  3028.  
  3029.  
  3030.  
  3031.  
  3032.  
  3033.  
  3034.  
  3035.  
  3036.  
  3037.  
  3038.  
  3039. MATLAB, page 46
  3040.  
  3041.  
  3042.  
  3043. Appendix.  The HELP document
  3044.  
  3045. NEWS  MATLAB NEWS dated May, 1981.
  3046.       This describes recent or local changes.
  3047.       The new features added since the November,  1980,  printing
  3048.       of the Users' Guide include DIARY, EDIT, KRON, MACRO, PLOT,
  3049.       RAT, TRIL, TRIU and six element-by-element operations:
  3050.             .*   ./   .   .*.   ./.   ..
  3051.       Some additional  capabilities  have  been  added  to  EXIT,
  3052.       RANDOM, RCOND, SIZE and SVD.
  3053.  
  3054. INTRO Welcome to MATLAB.
  3055.  
  3056.       Here are a few sample statements:
  3057.  
  3058.       A = <1 2; 3 4>
  3059.       b = <5 6>'
  3060.       x = Ab
  3061.       <V,D> = eig(A),  norm(A-V*D/V)
  3062.       help  , help eig
  3063.       exec('demo',7)
  3064.  
  3065.       For more information, see the MATLAB Users' Guide which  is
  3066.       contained in file ...  or may be obtained from ... .
  3067.  
  3068. HELP  HELP gives assistance.
  3069.       HELP HELP obviously prints this message.
  3070.       To see all the HELP messages, list the file ... .
  3071.  
  3072. <     < > Brackets used in forming vectors and matrices.
  3073.       <6.9  9.64  SQRT(-1)>  is  a  vector  with  three  elements
  3074.       separated  by  blanks.   <6.9,  9.64, sqrt(-1)> is the same
  3075.       thing.  <1+I 2-I 3>  and  <1 +I 2 -I 3>  are not the  same.
  3076.       The first has three elements, the second has five.
  3077.       <11 12 13; 21 22 23>  is a 2 by 3 matrix .   The  semicolon
  3078.       ends the first row.
  3079.  
  3080.       Vectors and matrices can be used inside < > brackets.
  3081.       <A B; C>  is allowed if the number of rows  of   A   equals
  3082.       the  number  of rows of  B  and the number of columns of  A
  3083.       plus the number of columns of   B   equals  the  number  of
  3084.       columns  of   C  .   This  rule  generalizes in a hopefully
  3085.       obvious way to allow fairly complicated constructions.
  3086.  
  3087.       A = < >  stores an empty matrix in  A , thereby removing it
  3088.       from the list of current variables.
  3089.  
  3090.       For the use of < and > on the left of  the  =  in  multiple
  3091.       assignment statements, see LU, EIG, SVD and so on.
  3092.  
  3093.       In WHILE and IF clauses, <>  means  less  than  or  greater
  3094.       than,  i.e.  not  equal, < means less than, > means greater
  3095.       than, <= means less than or equal, >= means greater than or
  3096.  
  3097.  
  3098.  
  3099.  
  3100.  
  3101.  
  3102.  
  3103.  
  3104.  
  3105. MATLAB, page 47
  3106.  
  3107.  
  3108.  
  3109.       equal.
  3110.  
  3111.       For the use of > and < to delineate macros, see MACRO.
  3112.  
  3113. >     See < .  Also see MACRO.
  3114.  
  3115. (     ( ) Used to indicate precedence in  arithmetic  expressions
  3116.       in  the  usual way.  Used to enclose arguments of functions
  3117.       in the usual way.  Used to enclose  subscripts  of  vectors
  3118.       and  matrices  in  a  manner somewhat more general than the
  3119.       usual way.  If  X   and   V  are  vectors,  then   X(V)  is
  3120.       <X(V(1)),  X(V(2)),  ...,  X(V(N))> .  The components of  V
  3121.       are rounded to nearest integers and used as subscripts.  An
  3122.       error  occurs  if  any  such  subscript  is  less than 1 or
  3123.       greater than the dimension of  X .  Some examples:
  3124.       X(3)  is the third element of  X .
  3125.       X(<1 2 3>)  is the first three elements of  X .  So is
  3126.       X(<SQRT(2), SQRT(3), 4*ATAN(1)>)  .
  3127.       If  X  has  N  components,  X(N:-1:1) reverses them.
  3128.       The same indirect subscripting is used in matrices.  If   V
  3129.       has   M  components and  W  has  N  components, then A(V,W)
  3130.       is the  M by N  matrix formed from the elements of A  whose
  3131.       subscripts are the elements of  V  and  W .  For example...
  3132.       A(<1,5>,:) = A(<5,1>,:)  interchanges rows 1 and 5 of  A .
  3133.  
  3134. )     See  ( .
  3135.  
  3136. =     Used in assignment statements and to mean equality in WHILE
  3137.       and IF clauses.
  3138.  
  3139. .     Decimal point.  314/100, 3.14  and   .314E1   are  all  the
  3140.       same.
  3141.  
  3142.       Element-by-element multiplicative operations  are  obtained
  3143.       using  .*  ,  ./  , or . .  For example, C = A ./ B is the
  3144.       matrix with elements  c(i,j) = a(i,j)/b(i,j) .
  3145.  
  3146.       Kronecker tensor products and quotients are  obtained  with
  3147.       .*. , ./.  and .. .  See KRON.
  3148.  
  3149.       Two or  more  points  at  the  end  of  the  line  indicate
  3150.       continuation.    The   total  line  length  limit  is  1024
  3151.       characters.
  3152.  
  3153. ,     Used to separate matrix subscripts and function  arguments.
  3154.       Used  at  the  end  of  FOR, WHILE and IF clauses.  Used to
  3155.       separate statements  in  multi-statement  lines.   In  this
  3156.       situation,  it  may  be  replaced  by semicolon to suppress
  3157.       printing.
  3158.  
  3159. ;     Used inside brackets to end rows.
  3160.       Used after an expression or statement to suppress printing.
  3161.       See SEMI.
  3162.  
  3163.  
  3164.  
  3165.  
  3166.  
  3167.  
  3168.  
  3169.  
  3170.  
  3171. MATLAB, page 48
  3172.  
  3173.  
  3174.  
  3175.      Backslash or matrix left division.   AB   is  roughly  the
  3176.       same  as   INV(A)*B  , except it is computed in a different
  3177.       way.  If  A  is an N by N matrix and  B  is a column vector
  3178.       with  N  components, or a matrix with several such columns,
  3179.       then X = AB  is the solution to  the  equation   A*X  =  B
  3180.       computed  by  Gaussian  elimination.   A warning message is
  3181.       printed if  A is badly scaled or nearly singular.
  3182.       AEYE produces the inverse of  A .
  3183.  
  3184.       If  A  is an  M by N  matrix with  M < or > N  and  B  is a
  3185.       column vector with  M  components, or a matrix with several
  3186.       such columns, then  X = AB  is the solution in  the  least
  3187.       squares  sense  to  the under- or overdetermined system  of
  3188.       equations A*X = B .  The  effective  rank,  K,  of   A   is
  3189.       determined  from  the  QR  decomposition  with pivoting.  A
  3190.       solution  X  is  computed  which  has  at  most  K  nonzero
  3191.       components  per column.  If  K < N this will usually not be
  3192.       the same solution as PINV(A)*B .
  3193.       AEYE produces a generalized inverse of  A .
  3194.  
  3195.       If A and B have the  same  dimensions,  then  A  .  B  has
  3196.       elements a(i,j)b(i,j) .
  3197.  
  3198.       Also, see EDIT.
  3199.  
  3200. /     Slash or matrix right division.  B/A  is roughly  the  same
  3201.       as  B*INV(A) .  More precisely,  B/A = (A'B')' .  See  .
  3202.  
  3203.       IF A and B have the  same  dimensions,  then  A  ./  B  has
  3204.       elements a(i,j)/b(i,j) .
  3205.  
  3206.       Two or more slashes together on a line indicate  a  logical
  3207.       end of line.  Any following text is ignored.
  3208.  
  3209. '     Transpose.  X'  is the complex conjugate transpose of  X  .
  3210.       Quote.   'ANY  TEXT'   is a vector whose components are the
  3211.       MATLAB internal codes for the characters.  A  quote  within
  3212.       the text is indicated by two quotes.  See DISP and FILE .
  3213.  
  3214. +     Addition.  X + Y .  X and Y must have the same dimensions.
  3215.  
  3216. -     Subtraction.  X  -  Y  .   X  and  Y  must  have  the  same
  3217.       dimensions.
  3218.  
  3219. *     Matrix multiplication, X*Y .  Any scalar (1  by  1  matrix)
  3220.       may multiply anything.  Otherwise, the number of columns of
  3221.       X must equal the number of rows of Y .
  3222.  
  3223.       Element-by-element multiplication is obtained with X .* Y .
  3224.  
  3225.       The Kronecker tensor product is denoted by X .*. Y .
  3226.  
  3227.       Powers.  X**p  is  X  to the   p   power.   p   must  be  a
  3228.  
  3229.  
  3230.  
  3231.  
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237. MATLAB, page 49
  3238.  
  3239.  
  3240.  
  3241.       scalar.  If  X  is a matrix, see  FUN .
  3242.  
  3243. :     Colon.  Used in subscripts,  FOR  iterations  and  possibly
  3244.       elsewhere.
  3245.       J:K  is the same as  <J, J+1, ..., K>
  3246.       J:K  is empty if  J > K .
  3247.       J:I:K  is the same as  <J, J+I, J+2I, ..., K>
  3248.       J:I:K  is empty if  I > 0 and J > K or if I < 0 and J < K .
  3249.       The colon notation can be used to pick out  selected  rows,
  3250.       columns and elements of vectors and matrices.
  3251.       A(:)  is all the  elements  of  A,  regarded  as  a  single
  3252.       column.
  3253.       A(:,J)  is the  J-th  column of A
  3254.       A(J:K)  is  A(J),A(J+1),...,A(K)
  3255.       A(:,J:K)  is  A(:,J),A(:,J+1),...,A(:,K) and so on.
  3256.       For the use of the colon in the FOR statement, See FOR .
  3257.  
  3258. ABS   ABS(X)  is the absolute value, or complex modulus,  of  the
  3259.       elements of X .
  3260.  
  3261. ANS   Variable created automatically  when  expressions  are  not
  3262.       assigned to anything else.
  3263.  
  3264. ATAN  ATAN(X)  is the arctangent of  X .  See FUN .
  3265.  
  3266. BASE  BASE(X,B) is a vector containing the base B  representation
  3267.       of   X  .   This is often used in conjunction with DISPLAY.
  3268.       DISPLAY(X,B)  is  the  same  as  DISPLAY(BASE(X,B)).    For
  3269.       example,    DISP(4*ATAN(1),16)   prints   the   hexadecimal
  3270.       representation of pi.
  3271.  
  3272. CHAR  CHAR(K)  requests  an  input  line  containing   a   single
  3273.       character  to  replace  MATLAB  character  number  K in the
  3274.       following table.  For example, CHAR(45) replaces backslash.
  3275.       CHAR(-K) replaces the alternate character number K.
  3276.  
  3277.                 K  character alternate name
  3278.               0 - 9   0 - 9    0 - 9   digits
  3279.              10 - 35  A - Z    a - z   letters
  3280.                36                      blank
  3281.                37       (        (     lparen
  3282.                38       )        )     rparen
  3283.                39       ;        ;     semi
  3284.                40       :             colon
  3285.                41       +        +     plus
  3286.                42       -        -     minus
  3287.                43       *        *     star
  3288.                44       /        /     slash
  3289.                45               $     backslash
  3290.                46       =        =     equal
  3291.                47       .        .     dot
  3292.                48       ,        ,     comma
  3293.                49       '        "     quote
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.  
  3300.  
  3301.  
  3302.  
  3303. MATLAB, page 50
  3304.  
  3305.  
  3306.  
  3307.                50       <        \     less
  3308.                51       >        !     great
  3309.  
  3310. CHOL  Cholesky factorization.  CHOL(X)  uses  only  the  diagonal
  3311.       and upper triangle of  X .  The lower triangular is assumed
  3312.       to be the (complex conjugate) transpose of the  upper.   If
  3313.       X   is  positive  definite,  then  R = CHOL(X)  produces an
  3314.       upper triangular  R  so that  R'*R = X .   If   X   is  not
  3315.       positive definite, an error message is printed.
  3316.  
  3317. CHOP  Truncate arithmetic.  CHOP(P) causes P places to be chopped
  3318.       off   after   each   arithmetic   operation  in  subsequent
  3319.       computations.  This means  P  hexadecimal  digits  on  some
  3320.       computers  and  P octal digits on others.  CHOP(0) restores
  3321.       full precision.
  3322.  
  3323. CLEAR Erases all variables, except EPS, FLOP, EYE and RAND.
  3324.       X = <>  erases only variable  X .  So does CLEAR X .
  3325.  
  3326. COND  Condition number in 2-norm.  COND(X) is the  ratio  of  the
  3327.       largest singular value of  X  to the smallest.
  3328.  
  3329. CONJG CONJG(X)  is the complex conjugate of  X .
  3330.  
  3331. COS   COS(X)  is the cosine of  X .  See FUN .
  3332.  
  3333. DET   DET(X)  is the determinant of the square matrix  X .
  3334.  
  3335. DIAG  If  V  is  a  row  or  column  vector  with  N  components,
  3336.       DIAG(V,K)   is a square matrix of order  N+ABS(K)  with the
  3337.       elements of  V  on the K-th diagonal.  K = 0  is  the  main
  3338.       diagonal,  K  >  0  is above the main diagonal and K < 0 is
  3339.       below the main diagonal.  DIAG(V)  simply puts  V   on  the
  3340.       main diagonal.
  3341.       eg. DIAG(-M:M) + DIAG(ONES(2*M,1),1) + DIAG(ONES(2*M,1),-1)
  3342.       produces a tridiagonal matrix of order 2*M+1 .
  3343.       IF  X  is a matrix,  DIAG(X,K)  is a column  vector  formed
  3344.       from the elements of the K-th diagonal of  X .
  3345.       DIAG(X)  is the main diagonal of  X .
  3346.       DIAG(DIAG(X))  is a diagonal matrix .
  3347.  
  3348. DIARY DIARY('file') causes a  copy  of  all  subsequent  terminal
  3349.       input and most of the resulting output to be written on the
  3350.       file. DIARY(0) turns it off.  See FILE.
  3351.  
  3352. DISP  DISPLAY(X) prints X  in  a  compact  format.   If  all  the
  3353.       elements  of  X  are  integers  between 0 and 51, then X is
  3354.       interpreted  as  MATLAB  text  and   printed   accordingly.
  3355.       Otherwise,  +  ,  -   and  blank  are printed for positive,
  3356.       negative and zero elements.  Imaginary parts are ignored.
  3357.       DISP(X,B) is the same as DISP(BASE(X,B)).
  3358.  
  3359. EDIT  There  are  no   editing   features   available   on   most
  3360.  
  3361.  
  3362.  
  3363.  
  3364.  
  3365.  
  3366.  
  3367.  
  3368.  
  3369. MATLAB, page 51
  3370.  
  3371.  
  3372.  
  3373.       installations and EDIT is not a command.  However, on a few
  3374.       systems a command line consisting of a single  backslash  
  3375.       will  cause  the local file editor to be called with a copy
  3376.       of the  previous  input  line.   When  the  editor  returns
  3377.       control to MATLAB, it will execute the line again.
  3378.  
  3379. EIG   Eigenvalues and eigenvectors.
  3380.       EIG(X) is a vector containing the eigenvalues of  a  square
  3381.       matrix  X .
  3382.       <V,D>  =  EIG(X)   produces  a  diagonal  matrix    D    of
  3383.       eigenvalues  and  a  full  matrix  V  whose columns are the
  3384.       corresponding eigenvectors so that  X*V = V*D .
  3385.  
  3386. ELSE  Used with IF .
  3387.  
  3388. END   Terminates the scope  of  FOR,  WHILE  and  IF  statements.
  3389.       Without  END's,  FOR  and WHILE repeat all statements up to
  3390.       the end of the line.  Each END is paired with  the  closest
  3391.       previous  unpaired FOR or WHILE and serves to terminate its
  3392.       scope.  The line
  3393.       FOR I=1:N, FOR J=1:N, A(I,J)=1/(I+J-1); A
  3394.       would cause A to be printed  N**2  times, once for each new
  3395.       element.  On the other hand, the line
  3396.       FOR I=1:N, FOR J=1:N, A(I,J)=1/(I+J-1); END, END, A
  3397.       will lead to only the final printing of  A .
  3398.       Similar considerations apply to WHILE.
  3399.       EXIT terminates execution of loops or of MATLAB itself.
  3400.  
  3401. EPS   Floating point relative  accuracy.   A  permanent  variable
  3402.       whose  value is initially the distance from 1.0 to the next
  3403.       largest floating point number.  The  value  is  changed  by
  3404.       CHOP,  and  other values may be assigned.  EPS is used as a
  3405.       default tolerance by PINV and RANK.
  3406.  
  3407. EXEC  EXEC('file',k) obtains  subsequent  MATLAB  input  from  an
  3408.       external  file.  The printing of input is controlled by the
  3409.       optional parameter k .
  3410.       If k = 1 , the input is echoed.
  3411.       If k = 2 , the MATLAB prompt <> is printed.
  3412.       If k = 4 , MATLAB pauses before each prompt and waits for a
  3413.       null line to continue.
  3414.       If k = 0 , there is no echo, prompt or pause.  This is  the
  3415.       default if the exec command is followed by a semicolon.
  3416.       If k = 7 , there will be echos, prompts and pauses. This is
  3417.       useful for demonstrations on video terminals.
  3418.       If k = 3 , there will be echos and prompts, but no  pauses.
  3419.       This is the the default if the exec command is not followed
  3420.       by a semicolon.
  3421.       EXEC(0) causes subsequent input to  be  obtained  from  the
  3422.       terminal. An end-of-file has the same effect.
  3423.       EXEC's may be nested, i.e. the text in the file may contain
  3424.       EXEC of another file.  EXEC's may also be driven by FOR and
  3425.       WHILE loops.
  3426.  
  3427.  
  3428.  
  3429.  
  3430.  
  3431.  
  3432.  
  3433.  
  3434.  
  3435. MATLAB, page 52
  3436.  
  3437.  
  3438.  
  3439. EXIT  Causes termination of a FOR or WHILE loop.
  3440.       If not in a loop, terminates execution of MATLAB.
  3441.  
  3442. EXP   EXP(X)  is the exponential of  X ,  e  to the X .  See  FUN
  3443.       .
  3444.  
  3445. EYE   Identity matrix.  EYE(N) is the N  by  N  identity  matrix.
  3446.       EYE(M,N)   is an M by N matrix with 1's on the diagonal and
  3447.       zeros elsewhere.  EYE(A)  is the same size  as   A  .   EYE
  3448.       with  no  arguments is an identity matrix of whatever order
  3449.       is appropriate in the context.   For  example,  A  +  3*EYE
  3450.       adds  3  to each diagonal element of  A .
  3451.  
  3452. FILE  The EXEC, SAVE, LOAD,  PRINT  and  DIARY  functions  access
  3453.       files.   The  'file'  parameter  takes  different forms for
  3454.       different operating systems.  On most systems,  'file'  may
  3455.       be a string of up to 32 characters in quotes.  For example,
  3456.       SAVE('A') or EXEC('matlab/demo.exec') .  The string will be
  3457.       used as the name of a file in the local operating system.
  3458.       On all systems, 'file' may be a positive integer   k   less
  3459.       than  10  which  will  be  used  as  a FORTRAN logical unit
  3460.       number. Some systems then automatically access a file  with
  3461.       a  name  like  FORT.k  or FORk.DAT. Other systems require a
  3462.       file with a name like FT0kF001 to be assigned  to  unit   k
  3463.       before  MATLAB  is  executed. Check your local installation
  3464.       for details.
  3465.  
  3466. FLOPS Count of floating point operations.
  3467.       FLOPS  is  a  permanently  defined  row  vector  with   two
  3468.       elements.    FLOPS(1)  is  the  number  of  floating  point
  3469.       operations counted during the previous statement.  FLOPS(2)
  3470.       is  a  cumulative total.  FLOPS can be used in the same way
  3471.       as any other vector.  FLOPS(2) = 0  resets  the  cumulative
  3472.       total.   In  addition,  FLOPS(1) will be printed whenever a
  3473.       statement is terminated by an extra comma.  For example,
  3474.       X = INV(A);,
  3475.       or
  3476.       COND(A),   (as the last statement on the line).
  3477.       HELP FLPS gives more details.
  3478.  
  3479. FLPS  More detail on FLOPS.
  3480.       It is not feasible to count absolutely all  floating  point
  3481.       operations,  but  most  of  the important ones are counted.
  3482.       Each multiply and add in a real vector operation such as  a
  3483.       dot  product  or  a 'saxpy' counts one flop.  Each multiply
  3484.       and add in a complex vector  operation  counts  two  flops.
  3485.       Other additions, subtractions and multiplications count one
  3486.       flop each if the result is real and two flops if it is not.
  3487.       Real  divisions  count one and complex divisions count two.
  3488.       Elementary functions count one if real and two if  complex.
  3489.       Some examples.  If A and B are real N by N matrices, then
  3490.       A + B  counts N**2 flops,
  3491.       A*B    counts N**3 flops,
  3492.  
  3493.  
  3494.  
  3495.  
  3496.  
  3497.  
  3498.  
  3499.  
  3500.  
  3501. MATLAB, page 53
  3502.  
  3503.  
  3504.  
  3505.       A**100 counts 99*N**3 flops,
  3506.       LU(A)  counts roughly (1/3)*N**3 flops.
  3507.  
  3508. FOR   Repeat statements a specific number of times.
  3509.       FOR variable = expr, statement, ..., statement, END
  3510.       The END at the end of a line may  be  omitted.   The  comma
  3511.       before  the  END  may  also be omitted.  The columns of the
  3512.       expression are stored one at a time  in  the  variable  and
  3513.       then the following statements, up to the END, are executed.
  3514.       The expression is often of the form X:Y, in which case  its
  3515.       columns  are  simply  scalars.  Some examples (assume N has
  3516.       already been assigned a value).
  3517.       FOR I = 1:N, FOR J = 1:N, A(I,J) = 1/(I+J-1);
  3518.       FOR J = 2:N-1, A(J,J) = J; END; A
  3519.       FOR S = 1.0: -0.1: 0.0, ...  steps S with increments of -0.1 .
  3520.       FOR E = EYE(N), ...   sets  E  to the unit N-vectors.
  3521.       FOR V = A, ...   has the same effect as
  3522.       FOR J = 1:N, V = A(:,J); ...  except J is also set here.
  3523.  
  3524. FUN   For matrix arguments  X , the  functions  SIN,  COS,  ATAN,
  3525.       SQRT,  LOG,  EXP and X**p are computed using eigenvalues  D
  3526.       and eigenvectors  V .  If  <V,D> =  EIG(X)   then   f(X)  =
  3527.       V*f(D)/V  .   This method may give inaccurate results if  V
  3528.       is badly conditioned.  Some idea of  the  accuracy  can  be
  3529.       obtained by comparing  X**1  with  X .
  3530.       For vector arguments,  the  function  is  applied  to  each
  3531.       component.
  3532.  
  3533. HESS  Hessenberg form.  The Hessenberg form of a matrix  is  zero
  3534.       below the first subdiagonal.  If the matrix is symmetric or
  3535.       Hermitian,  the  form  is  tridiagonal.   <P,H>  =  HESS(A)
  3536.       produces  a  unitary  matrix P and a Hessenberg matrix H so
  3537.       that A = P*H*P'.  By itself, HESS(A) returns H.
  3538.  
  3539. HILB  Inverse Hilbert matrix.  HILB(N)  is the inverse of  the  N
  3540.       by  N   matrix  with elements  1/(i+j-1), which is a famous
  3541.       example of a badly conditioned matrix.  The result is exact
  3542.       for  N  less than about 15, depending upon the computer.
  3543.  
  3544. IF    Conditionally execute statements.  Simple form...
  3545.       IF expression rop expression, statements
  3546.       where rop is =, <, >, <=, >=, or  <>  (not  equal)  .   The
  3547.       statements  are  executed  once if the indicated comparison
  3548.       between the real parts of the first components of  the  two
  3549.       expressions  is true, otherwise the statements are skipped.
  3550.       Example.
  3551.       IF ABS(I-J) = 1, A(I,J) = -1;
  3552.       More complicated forms use END in the same way it  is  used
  3553.       with FOR and WHILE and use ELSE as an abbreviation for END,
  3554.       IF expression not rop expression .  Example
  3555.       FOR I = 1:N, FOR J = 1:N, ...
  3556.          IF I = J, A(I,J) = 2; ELSE IF ABS(I-J) = 1, A(I,J) = -1; ...
  3557.          ELSE A(I,J) = 0;
  3558.  
  3559.  
  3560.  
  3561.  
  3562.  
  3563.  
  3564.  
  3565.  
  3566.  
  3567. MATLAB, page 54
  3568.  
  3569.  
  3570.  
  3571.       An easier way to accomplish the same thing is
  3572.       A = 2*EYE(N);
  3573.       FOR I = 1:N-1, A(I,I+1) = -1; A(I+1,I) = -1;
  3574.  
  3575. IMAG  IMAG(X)  is the imaginary part of  X .
  3576.  
  3577. INV   INV(X)  is the inverse of the square matrix  X .  A warning
  3578.       message  is  printed  if   X   is  badly  scaled  or nearly
  3579.       singular.
  3580.  
  3581. KRON  KRON(X,Y) is the Kronecker tensor product of X and Y  .  It
  3582.       is  also  denoted by X .*. Y . The result is a large matrix
  3583.       formed by taking all possible products between the elements
  3584.       of  X  and  those  of Y . For example, if X is 2 by 3, then
  3585.       X .*. Y is
  3586.  
  3587.             < x(1,1)*Y  x(1,2)*Y  x(1,3)*Y
  3588.               x(2,1)*Y  x(2,2)*Y  x(2,3)*Y >
  3589.  
  3590.       The five-point discrete Laplacian for an n-by-n grid can be
  3591.       generated by
  3592.  
  3593.             T = diag(ones(n-1,1),1);  T = T + T';  I = EYE(T);
  3594.             A = T.*.I + I.*.T - 4*EYE;
  3595.  
  3596.       Just  in  case  they  might  be  useful,  MATLAB   includes
  3597.       constructions called Kronecker tensor quotients, denoted by
  3598.       X ./. Y and X .. Y .  They are obtained by  replacing  the
  3599.       elementwise multiplications in X .*. Y with divisions.
  3600.  
  3601. LINES An internal count is kept of the number of lines of  output
  3602.       since  the  last  input.   Whenever this count approaches a
  3603.       limit, the  user  is  asked  whether  or  not  to  suppress
  3604.       printing  until the next input.  Initially the limit is 25.
  3605.       LINES(N) resets the limit to N .
  3606.  
  3607. LOAD  LOAD('file') retrieves all the variables from  the  file  .
  3608.       See  FILE  and  SAVE for more details.  To prepare your own
  3609.       file for LOADing, change the READs to WRITEs  in  the  code
  3610.       given under SAVE.
  3611.  
  3612. LOG   LOG(X)  is the  natural  logarithm  of   X  .   See  FUN  .
  3613.       Complex results are produced if  X  is not positive, or has
  3614.       nonpositive eigenvalues.
  3615.  
  3616. LONG  Determine output format.   All  computations  are  done  in
  3617.       complex arithmetic and double precision if it is available.
  3618.       SHORT and  LONG  merely  switch  between  different  output
  3619.       formats.
  3620.       SHORT    Scaled fixed point format with about 5 digits.
  3621.       LONG     Scaled fixed point format with about 15 digits.
  3622.       SHORT E  Floating point format with about 5 digits.
  3623.       LONG E   Floating point format with about 15 digits.
  3624.  
  3625.  
  3626.  
  3627.  
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633. MATLAB, page 55
  3634.  
  3635.  
  3636.  
  3637.       LONG Z   System dependent format, often hexadecimal.
  3638.  
  3639. LU    Factors from Gaussian elimination.  <L,U> = LU(X)  stores a
  3640.       upper triangular matrix in  U  and a 'psychologically lower
  3641.       triangular matrix', i.e. a product of lower triangular  and
  3642.       permutation matrices, in L , so that  X = L*U .  By itself,
  3643.       LU(X) returns the output from CGEFA .
  3644.  
  3645. MACRO The macro facility involves text and inward pointing  angle
  3646.       brackets.  If  STRING  is  the  source  text for any MATLAB
  3647.       expression or statement, then
  3648.             t = 'STRING';
  3649.       encodes the text as a vector of integers  and  stores  that
  3650.       vector in  t .  DISP(t) will print the text and
  3651.             >t<
  3652.       causes the text to be interpreted, either as a statement or
  3653.       as a factor in an expression.  For example
  3654.             t = '1/(i+j-1)';
  3655.             disp(t)
  3656.             for i = 1:n, for j = 1:n, a(i,j) = >t<;
  3657.       generates the Hilbert matrix of order n.
  3658.       Another example showing indexed text,
  3659.             S = <'x = 3            '
  3660.                  'y = 4            '
  3661.                  'z = sqrt(x*x+y*y)'>
  3662.             for k = 1:3, >S(k,:)<
  3663.       It is necessary that the strings making up  the  "rows"  of
  3664.       the "matrix"  S  have the same lengths.
  3665.  
  3666. MAGIC Magic square.  MAGIC(N) is an N  by  N  matrix  constructed
  3667.       from  the integers 1 through N**2 with equal row and column
  3668.       sums.
  3669.  
  3670. NORM  For matrices..
  3671.       NORM(X)  is the largest singular value of  X .
  3672.       NORM(X,1)  is the 1-norm of  X .
  3673.       NORM(X,2)  is the same as NORM(X) .
  3674.       NORM(X,'INF')  is the infinity norm of  X .
  3675.       NORM(X,'FRO')  is the F-norm, i.e.  SQRT(SUM(DIAG(X'*X))) .
  3676.       For vectors..
  3677.       NORM(V,P) = (SUM(V(I)**P))**(1/P) .
  3678.       NORM(V) = NORM(V,2) .
  3679.       NORM(V,'INF') = MAX(ABS(V(I))) .
  3680.  
  3681. ONES  All ones.  ONES(N)  is an N by N matrix of ones.  ONES(M,N)
  3682.       is an M by N matrix of ones .  ONES(A)  is the same size as
  3683.       A  and all ones .
  3684.  
  3685. ORTH  Orthogonalization.   Q  =  ORTH(X)   is   a   matrix   with
  3686.       orthonormal  columns,  i.e. Q'*Q = EYE, which span the same
  3687.       space as the columns of  X .
  3688.  
  3689. PINV  Pseudoinverse.  X = PINV(A) produces a matrix   X   of  the
  3690.  
  3691.  
  3692.  
  3693.  
  3694.  
  3695.  
  3696.  
  3697.  
  3698.  
  3699. MATLAB, page 56
  3700.  
  3701.  
  3702.  
  3703.       same  dimensions as  A' so that  A*X*A = A , X*A*X = X  and
  3704.       AX  and  XA  are Hermitian .  The computation is  based  on
  3705.       SVD(A)  and  any  singular values less than a tolerance are
  3706.       treated   as    zero.     The    default    tolerance    is
  3707.       NORM(SIZE(A),'inf')*NORM(A)*EPS.   This  tolerance  may  be
  3708.       overridden with X = PINV(A,tol).  See RANK.
  3709.  
  3710. PLOT  PLOT(X,Y) produces a plot of  the  elements  of  Y  against
  3711.       those  of X . PLOT(Y) is the same as PLOT(1:n,Y) where n is
  3712.       the  number  of   elements   in   Y   .    PLOT(X,Y,P)   or
  3713.       PLOT(X,Y,p1,...,pk)  passes the optional parameter vector P
  3714.       or scalars p1 through pk to the plot routine.  The  default
  3715.       plot  routine  is a crude printer-plot. It is hoped that an
  3716.       interface to local graphics equipment can be provided.
  3717.       An interesting example is
  3718.             t = 0:50;
  3719.             PLOT( t.*cos(t), t.*sin(t) )
  3720.  
  3721. POLY  Characteristic polynomial.
  3722.       If  A  is an N by N matrix, POLY(A) is a column vector with
  3723.       N+1   elements   which   are   the   coefficients   of  the
  3724.       characteristic polynomial,  DET(lambda*EYE - A) .
  3725.       If V is a vector, POLY(V) is a vector  whose  elements  are
  3726.       the  coefficients  of  the  polynomial  whose roots are the
  3727.       elements of V .  For vectors, ROOTS and  POLY  are  inverse
  3728.       functions  of  each  other,  up  to  ordering, scaling, and
  3729.       roundoff error.
  3730.       ROOTS(POLY(1:20)) generates Wilkinson's famous example.
  3731.  
  3732. PRINT PRINT('file',X) prints X on  the  file  using  the  current
  3733.       format determined by SHORT, LONG Z, etc.  See FILE.
  3734.  
  3735. PROD  PROD(X)  is the product of all the elements of  X .
  3736.  
  3737. QR    Orthogonal-triangular decomposition.
  3738.       <Q,R> = QR(X)  produces an upper triangular  matrix   R  of
  3739.       the  same dimension as  X  and a unitary matrix  Q  so that
  3740.       X = Q*R .
  3741.       <Q,R,E> = QR(X)  produces a  permutation  matrix   E  ,  an
  3742.       upper  triangular  R  with decreasing diagonal elements and
  3743.       a unitary  Q  so that  X*E = Q*R .
  3744.       By itself, QR(X) returns the output of CQRDC .  TRIU(QR(X))
  3745.       is R .
  3746.  
  3747. RAND  Random numbers and matrices.  RAND(N)  is an N by N  matrix
  3748.       with  random  entries.  RAND(M,N)  is an M by N matrix with
  3749.       random entries.  RAND(A)  is the same size as   A  .   RAND
  3750.       with no arguments is a scalar whose value changes each time
  3751.       it is referenced.
  3752.       Ordinarily,  random numbers are  uniformly  distributed  in
  3753.       the  interval  (0.0,1.0)  .   RAND('NORMAL')  switches to a
  3754.       normal distribution  with  mean  0.0  and  variance  1.0  .
  3755.       RAND('UNIFORM')  switches back to the uniform distribution.
  3756.  
  3757.  
  3758.  
  3759.  
  3760.  
  3761.  
  3762.  
  3763.  
  3764.  
  3765. MATLAB, page 57
  3766.  
  3767.  
  3768.  
  3769.       RAND('SEED') returns the current value of the seed for  the
  3770.       generator.    RAND('SEED',n)   sets   the   seed   to  n  .
  3771.       RAND('SEED',0) resets the seed to 0, its value when  MATLAB
  3772.       is first entered.
  3773.  
  3774. RANK  Rank.  K = RANK(X) is the number of singular values  of   X
  3775.       that are larger than NORM(SIZE(X),'inf')*NORM(X)*EPS.
  3776.       K = RANK(X,tol) is the number of singular values of  X that
  3777.       are larger than tol .
  3778.  
  3779. RCOND RCOND(X)   is  an  estimate  for  the  reciprocal  of   the
  3780.       condition  of   X   in  the  1-norm obtained by the LINPACK
  3781.       condition estimator.  If  X  is well conditioned,  RCOND(X)
  3782.       is  near  1.0  .   If  X  is badly conditioned, RCOND(X) is
  3783.       near 0.0 .
  3784.       <R, Z> = RCOND(A) sets  R  to RCOND(A) and also produces  a
  3785.       vector  Z so that
  3786.                  NORM(A*Z,1) = R*NORM(A,1)*NORM(Z,1)
  3787.       So, if RCOND(A) is small, then  Z  is an  approximate  null
  3788.       vector.
  3789.  
  3790. RAT   An experimental  function  which  attempts  to  remove  the
  3791.       roundoff   error  from  results  that  should  be  "simple"
  3792.       rational numbers.
  3793.       RAT(X) approximates each  element  of   X  by  a  continued
  3794.       fraction of the form
  3795.  
  3796.                 a/b = d1 + 1/(d2 + 1/(d3 + ... + 1/dk))
  3797.  
  3798.       with k <= len, integer di and abs(di) <= max .  The default
  3799.       values of the parameters are len = 5 and max = 100.
  3800.       RAT(len,max) changes the default values.  Increasing either
  3801.       len or max increases the number of possible fractions.
  3802.       <A,B> = RAT(X) produces integer matrices A and B so that
  3803.  
  3804.                 A ./ B  =  RAT(X)
  3805.  
  3806.       Some examples:
  3807.  
  3808.             long
  3809.             T = hilb(6), X = inv(T)
  3810.             <A,B> = rat(X)
  3811.             H = A ./ B, S = inv(H)
  3812.  
  3813.             short e
  3814.             d = 1:8,  e = ones(d),  A = abs(d'*e - e'*d)
  3815.             X = inv(A)
  3816.             rat(X)
  3817.             display(ans)
  3818.  
  3819.  
  3820. REAL  REAL(X)  is the real part of  X .
  3821.  
  3822.  
  3823.  
  3824.  
  3825.  
  3826.  
  3827.  
  3828.  
  3829.  
  3830.  
  3831. MATLAB, page 58
  3832.  
  3833.  
  3834.  
  3835. RETURN  From the terminal, causes return to the operating  system
  3836.       or  other  program  which  invoked  MATLAB.  From inside an
  3837.       EXEC, causes  return  to  the  invoking  EXEC,  or  to  the
  3838.       terminal.
  3839.  
  3840. RREF  RREF(A) is the reduced row echelon form of the  rectangular
  3841.       matrix.  RREF(A,B) is the same as RREF(<A,B>) .
  3842.  
  3843. ROOTS Find polynomial roots.  ROOTS(C)  computes the roots of the
  3844.       polynomial  whose  coefficients  are  the  elements  of the
  3845.       vector  C .  If  C  has  N+1  components, the polynomial is
  3846.       C(1)*X**N + ... + C(N)*X + C(N+1) .  See POLY.
  3847.  
  3848. ROUND ROUND(X)  rounds  the  elements  of   X   to  the   nearest
  3849.       integers.
  3850.  
  3851. SAVE  SAVE('file') stores all the current variables in a file.
  3852.       SAVE('file',X) saves only X .  See FILE .
  3853.       The variables may be retrieved later by LOAD('file') or  by
  3854.       your  own program using the following code for each matrix.
  3855.       The lines involving XIMAG may be eliminated  if  everything
  3856.       is known to be real.
  3857.  
  3858.             attach lunit to 'file'
  3859.             REAL or DOUBLE PRECISION XREAL(MMAX,NMAX)
  3860.             REAL or DOUBLE PRECISION XIMAG(MMAX,NMAX)
  3861.             READ(lunit,101) ID,M,N,IMG
  3862.             DO 10 J = 1, N
  3863.                READ(lunit,102) (XREAL(I,J), I=1,M)
  3864.                IF (IMG .NE. 0) READ(lunit,102) (XIMAG(I,J),I=1,M)
  3865.          10 CONTINUE
  3866.  
  3867.       The formats used are system dependent.  The  following  are
  3868.       typical.     See    SUBROUTINE   SAVLOD   in   your   local
  3869.       implementation of MATLAB.
  3870.  
  3871.         101 FORMAT(4A1,3I4)
  3872.         102 FORMAT(4Z18)
  3873.         102 FORMAT(4O20)
  3874.         102 FORMAT(4D25.18)
  3875.  
  3876. SCHUR Schur decomposition.  <U,T> = SCHUR(X)  produces  an  upper
  3877.       triangular  matrix   T , with the eigenvalues of  X  on the
  3878.       diagonal, and a unitary matrix  U so that  X =  U*T*U'  and
  3879.       U'*U = EYE .  By itself, SCHUR(X) returns  T .
  3880.  
  3881. SHORT See LONG .
  3882.  
  3883. SEMI  Semicolons at the end of  lines  will  cause,  rather  than
  3884.       suppress,  printing.   A  second  SEMI restores the initial
  3885.       interpretation.
  3886.  
  3887. SIN   SIN(X)  is the sine of  X .  See FUN .
  3888.  
  3889.  
  3890.  
  3891.  
  3892.  
  3893.  
  3894.  
  3895.  
  3896.  
  3897. MATLAB, page 59
  3898.  
  3899.  
  3900.  
  3901. SIZE  If X is an M by N matrix, then SIZE(X) is <M, N> .
  3902.       Can also be used with a multiple assignment,
  3903.             <M, N> = SIZE(X) .
  3904.  
  3905. SQRT  SQRT(X)  is the square root of  X .   See  FUN  .   Complex
  3906.       results  are  produced  if   X   is  not  positive,  or has
  3907.       nonpositive eigenvalues.
  3908.  
  3909. STOP  Use EXIT instead.
  3910.  
  3911. SUM   SUM(X)   is  the  sum  of  all  the  elements   of    X   .
  3912.       SUM(DIAG(X))  is the trace of  X .
  3913.  
  3914. SVD   Singular value decomposition.  <U,S,V> = SVD(X)  produces a
  3915.       diagonal  matrix  S , of the same dimension as  X  and with
  3916.       nonnegative diagonal  elements  in  decreasing  order,  and
  3917.       unitary matrices  U  and  V  so that  X = U*S*V' .
  3918.       By itself, SVD(X) returns a vector containing the  singular
  3919.       values.
  3920.       <U,S,V>   =   SVD(X,0)   produces   the   "economy    size"
  3921.       decomposition.   If  X  is m by n with m > n, then only the
  3922.       first n columns of U are computed and S is n by n .
  3923.  
  3924. TRIL  Lower triangle.  TRIL(X) is the lower triangular part of X.
  3925.       TRIL(X,K) is the elements on and below the K-th diagonal of
  3926.       X.  K = 0 is the main diagonal, K > 0  is  above  the  main
  3927.       diagonal and K < 0 is below the main diagonal.
  3928.  
  3929. TRIU  Upper triangle.  TRIU(X) is the upper triangular part of X.
  3930.       TRIU(X,K) is the elements on and above the K-th diagonal of
  3931.       X.  K = 0 is the main diagonal, K > 0  is  above  the  main
  3932.       diagonal and K < 0 is below the main diagonal.
  3933.  
  3934. USER  Allows personal  Fortran  subroutines  to  be  linked  into
  3935.       MATLAB .  The subroutine should have the heading
  3936.  
  3937.                SUBROUTINE USER(A,M,N,S,T)
  3938.                REAL or DOUBLE PRECISION A(M,N),S,T
  3939.  
  3940.       The MATLAB statement  Y = USER(X,s,t)  results in a call to
  3941.       the  subroutine with a copy of the matrix  X  stored in the
  3942.       argument  A , its column and row dimensions in  M  and  N ,
  3943.       and  the scalar parameters  s  and  t  stored in  S  and  T
  3944.       . If  s and t  are omitted, they are set to  0.0  .   After
  3945.       the  return,   A  is stored in  Y .  The dimensions  M  and
  3946.       N  may be reset within the subroutine.  The statement  Y  =
  3947.       USER(K)  results in a call with M = 1, N = 1  and  A(1,1) =
  3948.       FLOAT(K) .  After the subroutine has been written, it  must
  3949.       be compiled and linked to the MATLAB object code within the
  3950.       local operating system.
  3951.  
  3952. WHAT  Lists commands and functions currently available.
  3953.  
  3954.  
  3955.  
  3956.  
  3957.  
  3958.  
  3959.  
  3960.  
  3961.  
  3962.  
  3963. MATLAB, page 60
  3964.  
  3965.  
  3966.  
  3967. WHILE Repeat statements an indefinite number of times.
  3968.       WHILE expr rop expr, statement, ..., statement, END
  3969.       where rop is =, <, >, <=, >=, or <> (not equal) .  The  END
  3970.       at  the end of a line may be omitted.  The comma before the
  3971.       END may also be omitted.  The commas  may  be  replaced  by
  3972.       semicolons   to   avoid   printing.    The  statements  are
  3973.       repeatedly executed as long  as  the  indicated  comparison
  3974.       between  the  real parts of the first components of the two
  3975.       expressions is true.   Example  (assume  a  matrix   A   is
  3976.       already defined).
  3977.       E = 0*A; F = E + EYE; N = 1;
  3978.       WHILE NORM(E+F-E,1) > 0, E = E + F; F = A*F/N; N = N + 1;
  3979.       E
  3980.  
  3981. WHO   Lists current variables.
  3982.  
  3983. WHY   Provides succinct answers to any questions.
  3984.  
  3985. //
  3986.  
  3987.  
  3988.  
  3989.  
  3990.  
  3991.  
  3992.  
  3993.  
  3994.  
  3995.  
  3996.  
  3997.  
  3998.  
  3999.  
  4000.  
  4001.  
  4002.  
  4003.  
  4004.  
  4005.  
  4006.  
  4007.  
  4008.  
  4009.  
  4010.  
  4011.  
  4012.  
  4013.  
  4014.  
  4015.  
  4016.  
  4017.  
  4018.  
  4019.  
  4020.  
  4021.  
  4022.  
  4023.  
  4024.  
  4025.  
  4026.  
  4027.